home *** CD-ROM | disk | FTP | other *** search
/ AOL File Library: 4,101 to 4,200 / aol-file-protocol-4400-4101-to-4200.zip / AOLDLs / ADV - Message Board Archives / Archived Msgs_ Dialog Manager / ADV.DIALMGR.shk / ADV.DialMgr.Log
Text File  |  1992-09-13  |  104KB  |  3,194 lines

  1.  
  2. =======================================================================
  3. Archived Messages: "Dialog Manager"
  4. America Online Apple II Developers Forum.
  5. Go Keyword ADV!
  6. (C) 1992.
  7. ===================================================================jrm=
  8. This topic is for the discussion of the Apple IIGS Dialog Manager (tool set
  9. #21).
  10.  
  11.  
  12. Type:      Response       
  13. From:      A2Pro Tim
  14. Date:      88-04-24 03:00:25 EST
  15. 88-04-24 03:00:25 EST
  16. CC:        SYSOP jim
  17. Re:        filterProc example needed...
  18.  
  19. I need to see an actual example of a filter procedure for use with a modal
  20. dialog.  I'm trying to use a dialog box with three buttons and I need to
  21. determine which one was clicked in by the user.  Example source code in C or
  22. Pascal would be appreciated...
  23.  
  24. Tim S.
  25.  
  26.  
  27.  
  28. Type:      Response       
  29. From:      ScottG25
  30. Date:      88-04-24 09:56:04 EST
  31. 88-04-24 09:56:04 EST
  32. CC:        SYSOP jim
  33. Re:        Re: Dialog Manager
  34.  
  35. I'll vote for an example, too!!
  36.  
  37.  
  38.  
  39. Type:      Response       
  40. From:      AIIDTS
  41. Date:      88-04-24 12:05:33 EST
  42. 88-04-24 12:05:33 EST
  43. CC:        SYSOP jim
  44. Re:        Re: Dialog Manager
  45.  
  46. I just found a great filter proc example. It is in Gary Little's exploring the
  47. IIgs book, on page 302. Sorry to say that it is in assebly, but you might still
  48. be able to use it as a guide.
  49.  
  50. Jim
  51.  
  52.  
  53.  
  54. Type:      Response       
  55. From:      A2Pro Tim
  56. Date:      88-04-24 20:04:36 EST
  57. 88-04-24 20:04:36 EST
  58. CC:        SYSOP jim
  59. Re:        Re: filterProc example...
  60.  
  61. Jim,
  62.  
  63.      Thanks!  I've nearly got it figured out anyways, but I am POSITIVE that
  64. your suggestion will help.  Once I get it working, I'll make it into an example
  65. and post it somewhere...
  66.  
  67. Tim S.
  68.  
  69.  
  70.  
  71. Type:      Response       
  72. From:      AFL Doug
  73. Date:      88-10-08 19:58:45 EST
  74. Re:        Re: Dialog Manager
  75.  
  76. Does anyone have an example of code for a Modeless dialog?  I can't get mine to
  77. display? I don't get any errors and I think I have it right, but it won't show.
  78. Any help?
  79.  
  80. Doug
  81.  
  82.  
  83.  
  84. Type:      Response       
  85. From:      AFL Jim
  86. Date:      88-10-09 00:32:15 EST
  87. Re:        Re: Dialog Manager
  88.  
  89. Doug,
  90.  
  91. How about showing us what you did and then we'll debug it...
  92.  
  93. Jim
  94.  
  95.  
  96.  
  97. Type:      Response       
  98. From:      ScottG25
  99. Date:      88-10-09 09:25:57 EST
  100. Re:        Re: Dialog Manager
  101.  
  102. Gary Little's book, "Exploring the Apple IIgs" has a nice simple example of
  103. Modeless Dialogs.  He also shows how to handle "Modeless Events".  
  104.  
  105.  
  106.  
  107. Type:      Response       
  108. From:      AFL Jim
  109. Date:      88-10-09 19:31:23 EST
  110. Re:        Re: Dialog Manager
  111.  
  112. Thanks for noting that, Scott. I was looking for the right book last night and
  113. didn't notice that.
  114.  
  115. Jim
  116.  
  117.  
  118.  
  119. Type:      Response       
  120. From:      AFL Doug
  121. Date:      88-10-10 20:50:56 EST
  122. Re:        Re: Dialog Manager
  123.  
  124. Ok, I will list the code here later tonight(after my forum).  It is in C.  I
  125. have Gary's book so I will look at that(I think it is the only book I haven't
  126. looked at!!! grrr.)
  127.  
  128. Doug
  129.  
  130.  
  131.  
  132. Type:      Response       
  133. From:      AFL Doug
  134. Date:      88-10-11 19:53:10 EST
  135. Re:        Re: Dialog Manager
  136.  
  137. Ok, here is the offending code for the Modeless dialog
  138.  
  139. GraphPortPtr commanddialog;
  140.  
  141. commanddialog = NewModelessDialog(&dialogRect,"Command",-1,FRAME,
  142.                     Null,0,0,200,320);
  143.  
  144. NewDItem(commanddialog,2,&buttonRect1,radioItem,moveStr,0,0,Null);
  145. etc, etc.
  146.  
  147. All the variables are defined fine for a modal dialog(I have changed the
  148. NewModeless command to a Modal command and the modal dialog works fine). This
  149. code compiles without error, and runs without error.  It just never shows the
  150. dialog on the screen!  I looked at the code in gary's book and it is just like
  151. what I am doing as far as I can tell.  any ideas?
  152.  
  153. Doug
  154.  
  155.  
  156.  
  157. Type:      Response       
  158. From:      Dave Lyons
  159. Date:      88-10-11 20:05:15 EST
  160. Re:        NewModeless Dialog from C
  161.  
  162. Gee, hate to tell you this, but it looks like MOST of the NewModelessDailog
  163. parameters have something wrong with them!
  164.  
  165. >commanddialog = NewModelessDialog(&dialogRect,"Command",
  166. >                  -1,FRAME,Null,0,0,200,320);
  167.  
  168. "Command" should be "\pCommand" (a Pascal style string).  The -1 should be -1L
  169. (a long (4-byte) value).  Finally, those last 4 parameters are supposed to be
  170. one pointer to a rectangle (you're passing the whole rect instead of a pointer
  171. to it).
  172.  
  173. Your NewDItem call looks fine, though.
  174.  
  175. (Under C, your program will compile no matter *what* parameters you pass...the
  176. compiler couldn't care less.)
  177.  
  178. I hope that helps!  (I'm sure it will.)
  179.  
  180. --Dave
  181.  
  182.  
  183.  
  184. Type:      Response       
  185. From:      ScottG25
  186. Date:      88-10-11 21:57:04 EST
  187. Re:        Re: Dialog Manager
  188.  
  189. RE: Gary Little's book..
  190.  
  191. Page 285 has an error in the sample code for _NewModelessDialog... both PLA's
  192. should be PHA's...This is the 2nd and 3rd lines from the bottom of the page..
  193.  
  194.  
  195. RE: C example..Good job, Dave! Page 221 of Morgan Davis and Dan Gookin's book
  196. "Advanced Programming Techniques for the Apple IIgs Toolbox" has a short
  197. example of the coding necessary, too--In C.
  198.  
  199.  
  200.  
  201. Type:      Response       
  202. From:      AFL Doug
  203. Date:      88-10-15 14:22:22 EST
  204. Re:        Re: Dialog Manager
  205.  
  206. Well, with the changes to the NewModelessDialog call my modeless dialog now
  207. appears.  Thanks for all the suggestions and help.  But, none of the items will
  208. appear in the dialog.  i have even copied items that worked in modal dialogs
  209. and they don't appear. what am I doing wrong?  I am using the NewDItem call(as
  210. shown in my previous plea for help :)
  211.  
  212. Doug
  213.  
  214.  
  215.  
  216. Type:      Response       
  217. From:      AFL Doug
  218. Date:      88-10-15 14:40:49 EST
  219. Re:        Re: Dialog Manager
  220.  
  221. Here is the code that creates the Modeless dialog but none of the dialog items
  222. appear.
  223.  
  224.  
  225.  
  226. static char moveStr [] = "\p  MOVE  ";
  227. Rect moveRect = {40,5,0,0};
  228. static char chargeStr [] = "\p CHARGE ";
  229. Rect chargeRect = {55,5,0,0};
  230. static char patrolStr [] = "\p PATROL ";
  231. Rect patrolRect = {70,5,0,0};
  232. static char retreatStr [] = "\pRETREAT";
  233. Rect retreatRect = {85,5,0,0};
  234. static char defendStr [] = "\p DEFEND ";
  235. Rect defendRect = {100,5,0,0};
  236. Rect facingRect = {140,10,0,0};
  237. static char facingStr [] = "\p FACING  ";
  238. Rect formationRect = {120,10,0,0};
  239. static char formationStr [] = "\pFORMATION";
  240. Rect cRect = {30,205,178,314};
  241.  
  242. show_command_dialog(x)
  243. unsigned int x;
  244. {
  245.    int quit;
  246.    Word choice,itemHit;
  247.    GrafPortPtr commanddialog;
  248.  
  249.    c2pstr(commandText);
  250.  
  251.    commanddialog=NewModelessDialog(&cRect,"\pCommand",-1L,FRAME,0L,&cRect);
  252.  
  253.    NewDItem (commanddialog,1,&moveRect,radioItem,moveStr,0,2,NULL);
  254.    NewDItem (commanddialog,2,&chargeRect,radioItem,chargeStr,0,2,NULL);
  255.    NewDItem (commanddialog,3,&patrolRect,radioItem,patrolStr,0,2,NULL);
  256.    NewDItem (commanddialog,4,&retreatRect,radioItem,retreatStr,0,2,NULL);
  257.    NewDItem (commanddialog,5,&defendRect,radioItem,defendStr,0,2,NULL);
  258.    NewDItem (commanddialog,6,&facingRect,buttonItem,facingStr,0,0,NULL);
  259.    NewDItem (commanddialog,7,&formationRect,buttonItem,formationStr,0,0,NULL);
  260.  
  261.    while(quit == TRUE){
  262.        TaskMaster(0xFFFF,&TheEvent);
  263.        if (IsDialogEvent(&TheEvent)){
  264.            CloseDialog(commanddialog);
  265.            quit = FALSE;
  266.            }
  267.        }
  268. }
  269.  
  270.  
  271. Any Ideas what I am doing wrong?
  272.  
  273. Doug
  274.  
  275.  
  276.  
  277. Type:      Response       
  278. From:      Dave Lyons
  279. Date:      88-10-16 00:28:51 EST
  280. Re:        DialogSelect, etc.
  281.  
  282. Doug, the problems are in your TaskMaster/IsDialogEvent loop.  (Why you repeat
  283. until quit is FALSE baffles me, but that isn't a problem...makes sense if you
  284. call the var notQuit).
  285.  
  286. Anyway, the items in your modeless dialog won't get processed until you allow
  287. DialogSelect to handle events that IsDialogEvent returns true for.  The most
  288. important one is Update--DialogSelect never gets to handle an update event for
  289. your modeless dialog, so the dialog items are never drawn.
  290.  
  291. By the way, that piece of code doesn't look like your program's main event
  292. loop.  The idea of a MODELESS dialog is that you're not in any special
  293. mode--your main loop should continue as before--menus should be usable, other
  294. windows should still work, etc.
  295.  
  296. --Dave L 
  297.  
  298.  
  299.  
  300. Type:      Response       
  301. From:      AFL Doug
  302. Date:      88-10-16 14:12:57 EST
  303. Re:        Re: Dialog Manager
  304.  
  305. Thanks for the idea of what is wrong.
  306.  
  307. This code comes from a game that has several different 'modes'.  Each mode has
  308. its own event loop (games of course can't fit the normal setup).   This
  309. eventloop however hasn't been added as I have to get the dialog working before
  310. I can do anything with the events. :)
  311.  
  312. I will let you know how my floundering around goes!
  313.  
  314. Doug
  315.  
  316.  
  317.  
  318. Type:      Response       
  319. From:      AFL Doug
  320. Date:      88-10-16 15:11:42 EST
  321. Re:        Re: Dialog Manager
  322.  
  323. Ok, I made the changes (at least I think I did) and still nothing is displayed.
  324. Why do you say that the buttons aren't displayed until dialogselect is called? 
  325. How is that going to be selected until the user selects a button, and if they
  326. can't see the buttons how are they going to select?   The dialog has to be
  327. displayed before any event can happen?  But, I changed it like you said and
  328. still nothing is displayed(the window opens correctly but the radio buttons are
  329. never shown).  Maybe you should spell it you for me (list the code), I don't
  330. seem to be able to get a handle(no pun intended) on these modeless dialogs.
  331.  
  332. Doug
  333.  
  334.  
  335.  
  336. Type:      Response       
  337. From:      AFL Doug
  338. Date:      88-10-16 20:01:12 EST
  339. Re:        Re: Dialog Manager
  340.  
  341. After rereading all this I still don't have a solution, but I would like to
  342. explain why I am using another event loop.  In the context of the game this is
  343. for there are several windows open.  when the main loop is being processed the
  344. game proceeds normally.  However, when a player stops play to give commands the
  345. game halts( so there is no use to process the main eventloop since nothing is
  346. allowed to happen).  However, to give the commands the player must at times
  347. click in the various windows.  A Modal dialog won't work because the user can
  348. only click in the Modal dialog box(which would preclude the user being able to
  349. click in other windows). So I am trying to use a Modeless dialog and a separate
  350. event loop.  Once the player finishes giving command the program returns to the
  351. main event loop and the game continues.
  352.  
  353. Does that answer your question as to why I am processing it this way?
  354.  
  355. Doug
  356.  
  357.  
  358.  
  359. Type:      Response       
  360. From:      Dave Lyons
  361. Date:      88-10-16 23:26:54 EST
  362. Re:        Re: Dialog Manager
  363.  
  364. Hmmm...seems like it would be simpler to just have the one main event loop and
  365. keep a flag to say what sorts of things are allowed to happen...otherwise it
  366. seems like you'll be duplicating a lot of effort for things that can happen in
  367. *both* cases (like menu choices?).
  368.  
  369. Anyway, DialogSelect may not be a good name for the tool, leading to some
  370. confusion.  HandleModelessDialogEvent would explain it better, I think.  You're
  371. supposed to call DialogSelect with any event that IsDialogEvent returns TRUE
  372. for; these events will include things like MouseDown in a modeless dialog
  373. window *and* things like Update events for that window.  The items in your
  374. modeless dialog will be *drawn by* DialogSelect if you call it appropriately
  375. when IsDialogEvent says to.  It will also take care of enabling/disabling items
  376. when Activate events come through for your modelss dlg window.  See page 6-39
  377. of Toolbox Ref vol I.
  378.  
  379. The code to call it looks something like this (untested):
  380.  
  381.    event = TaskMaster(-1,&event);
  382.    if(IsDialogEvent(&event))
  383.      if(DialogSelect(&event,&dlg,&item))
  384.        {
  385.           /* handle item "item" hit in dialog "dlg" */
  386.        }
  387.    /* go ahead and handle other events here */
  388.  
  389.  
  390.  
  391. Type:      Response       
  392. From:      AFL Doug
  393. Date:      88-10-17 16:55:00 EST
  394. Re:        Re: Dialog Manager
  395.  
  396. Thanks for the code, I will let you know how it goes.
  397.  
  398. About the two event loops.  If there were ever items that were executed in
  399. *BOTH* then I would agree with you.  But, believe it or not, NO action is
  400. duplicated(not even menu items).  The two modes are completely distinct parts. 
  401. And also, I am straining for every ounce of speed I can squeeze out of this. 
  402. Every Extra part that I add to the game loop(the loop that is not this dialog
  403. loop) slows the game down more.  Does this make sense?
  404.  
  405. Doug
  406.  
  407.  
  408.  
  409. Type:      Response       
  410. From:      AFL Doug
  411. Date:      88-10-21 20:07:04 EST
  412. Re:        Re: Dialog Manager
  413.  
  414. Here is the solution to the problem.  Thanks to all for their help.
  415.  
  416.  
  417.  
  418.  
  419. Subj:  Modeless problem solved               88-10-18 00:31:42 EDT
  420. To:    AFL Doug                              From:  AFL Floyd
  421.  
  422. GrafPortPtr  theDialogPtr;
  423.  
  424.    while(!done){
  425.        TaskMaster(0xFFFF,&TheEvent);
  426.        if (IsDialogEvent(&TheEvent))
  427.            if(DialogSelect(&TheEvent, theDialogPtr, &itemHit))
  428.                       CloseDialog(theDialogPtr);
  429.    }
  430.     
  431. Note the addition of "theDialogPtr".  Since DialogSelect returns a pointer in
  432. the second parm, if you use your original (commandDialog) as the pram it will
  433. be overwritten with what ever other DialogPtr that the event is in.
  434.  
  435. Secondly, notice the & in front of itemHit.  The proper parm is a pointer, not
  436. a value.
  437.  
  438.  
  439. Oh, the above code will close the Dialog for *any* dialog event. You would need
  440. to use a switch statement in actual use for handling the different item events.
  441.  
  442. Floyd   
  443.  
  444.  
  445.  
  446. Type:      Response       
  447. From:      Dave Lyons
  448. Date:      88-10-21 20:57:33 EST
  449. Re:        Re: Dialog Manager
  450.  
  451. Doug, you need an "&" in front of that theDialogPtr parameter, too!  That
  452. parameter tells DialogSelect where to store a pointer to the dialog that it
  453. determines the event applies to.  (In other words, it's parallel to the itemHit
  454. parameter.)
  455.  
  456. Clarification--by "dialog event" Floyd means clicking on some item in a dialog;
  457. this is a different meaning from what IsDialogEvent returns true for. 
  458. IsDialogEvent returns true not only for mouse-down events in a dialog, but also
  459. for Update events, etc.  When DialogSelect gets fed an Update event or
  460. something else similar, it *does* stuff (like redrawing the dialog items), and
  461. then it returns FALSE (meaning that no further action needs to be taken by your
  462. program).
  463.  
  464. --Dave L
  465.  
  466.  
  467.  
  468. Type:      Response       
  469. From:      AFL Floyd
  470. Date:      88-10-28 07:43:18 EST
  471. Re:        Re: Dialog Manager
  472.  
  473. Dave,
  474.  
  475. The missing '&' in front of the dialog pointer was a typo (I mentioned it to
  476. Doug). :)
  477.  
  478. You know what I meant about the dialog events.  This was just a *short*
  479. example, I didn't try to explain the entire dialog mgr. ;)
  480.  
  481. Floyd
  482.  
  483.  
  484.  
  485. Type:      Response       
  486. From:      Don87
  487. Date:      88-11-01 22:36:11 EST
  488. Re:        Re: Dialog Manager
  489.  
  490. Hi,
  491.  
  492. Here's another question for you all that is probably very simple.
  493. I can't figure out why my program won't save the settings of my radio buttons
  494. after I close my modal dialog box.  They highlight and unhilight just fine but
  495. when I close the box and return to it during program execution they are back in
  496. their default settings.
  497.  
  498. What I'm using is almost a carbon copy of TML's example program called 'GSDemo'
  499. in the procedures PushRadioButtons and DoModalDialog.
  500.  
  501. Thanks for all your help so far.
  502.  
  503. Don Mocarski.  
  504.  
  505.  
  506.  
  507. Type:      Response       
  508. From:      Dave Lyons
  509. Date:      88-11-02 00:51:53 EST
  510. Re:        Re: Dialog Manager
  511.  
  512. Maybe I'm misunderstanding the question, but it seems obvious:  if you're
  513. actually _closing_ the dialog with CloseDialog, then when you recreate the
  514. thing later with NewMode[al,less]Dialog you're starting fresh, and you'll have
  515. to use SteDItemValue on your radio buttons again to select the one you want.
  516.  
  517. Does that help?
  518.  
  519. --Dave Lyons
  520.  
  521.  
  522.  
  523. Type:      Response       
  524. From:      AFL Jim
  525. Date:      88-11-02 09:50:07 EST
  526. Re:        Re: Dialog Manager
  527.  
  528. Don,
  529.  
  530. You should make sure you're using global variables for the default values in
  531. your dialog. Local variables within a procedure or function are destroyed when
  532. that procedure or function ends.
  533.  
  534. Jim
  535.  
  536.  
  537.  
  538. Type:      Response       
  539. From:      Don87
  540. Date:      88-11-02 19:14:24 EST
  541. Re:        Re: Dialog Manager
  542.  
  543. Dave and Jim,
  544.  
  545. Thanks again to you both.  I keep using local variables and reassigning them to
  546. the default values each time I call a procedure.  It's a nasty habit I have. 
  547. It's funny that I did the right thing for the line edit items and not for the
  548. radio buttons.
  549.  
  550. Two more questions ...
  551.  
  552. I have six line edit items each of which is no longer than three characters
  553. long.  When I press the tab button I'd like the program to select them in the
  554. order of their item ID numbers.  The program doesn't seem to do that on it's
  555. own.  Any ideas on what I'm doing wrong?
  556.  
  557. Secondly I'd like the program to refuse input in these line edit items that is
  558. out of a specified range.  Is that what a filter procedure is for?
  559.  
  560. Thanks again.
  561.  
  562. Don Mocarski
  563.  
  564.  
  565.  
  566. Type:      Response       
  567. From:      Dave Lyons
  568. Date:      88-11-02 20:13:14 EST
  569. Re:        Re: Dialog Manager
  570.  
  571. The order in which Tab moves through your line edit items depends on the order
  572. they were added to the dialog (with NewDItem, for example) rather than on their
  573. ID numbers.
  574.  
  575. Mainly out of laziness, I've never tried restricting the contents of a line
  576. edit item--but Yes, that's what a filter proc is for
  577.  
  578.  
  579.  
  580. Type:      Response       
  581. From:      Don87
  582. Date:      88-11-03 19:47:17 EST
  583. Re:        Re: Dialog Manager
  584.  
  585. Thanks again Dave.
  586.  
  587. Don Mocarski
  588.  
  589.  
  590.  
  591. Type:      Response       
  592. From:      AFL Jim
  593. Date:      88-11-04 15:40:52 EST
  594. Re:        Re: Dialog Manager
  595.  
  596. Oooops... Wrong button :) I had to grab this one quick from the bit bucket
  597. before it was emptied. --Jim
  598.  
  599. Subj:  Re: Dialog Manager                    88-11-04 06:34:29 est
  600. From:  SkipS
  601.  
  602. Has anyone had much success using a scroll bar in a dialog box? I've tried
  603. using the TML examples but the examples don't really do anything except display
  604. a scroll bar.    When I try to assign global values to a variable and keep them
  605. in sync with the scroll bar I get random values as a result.  The IIgs
  606. Reference even says it doesn't recommend using a certain call that is shown in
  607. the demo.  The call 'GetControlDItem' seems to be the problem. Is there a way
  608. around the problem with this call.  Thanks for any help.
  609. Skip  
  610.  
  611.  
  612.  
  613. Type:      Response       
  614. From:      ScottG25
  615. Date:      88-11-04 18:57:40 EST
  616. Re:        Re: Dialog Manager
  617.  
  618. Skip,
  619.  
  620. I don't know much about TML Pascal, tho I've used _GetControlDItem in a dialog,
  621. on a scrollbar from assembly language with out any ill effects.  Depending on
  622. what you want to do with the Scrollbar, it may be better to use a Scrollbar
  623. Action procedure.  The scrollbar action procedure's pointer is contained in the
  624. item's template at the itemDescr offset if you're using GetNewDItem or
  625. GetNewModalDialog.  If Mike Westerfields "Vaccine" source is in the libraries,
  626. it has a scrollbar action procedure in Orca/Pascal - it should be pretty close
  627. to a TML counterpart.  I hope this helps.
  628.  
  629. Scott
  630.  
  631.  
  632.  
  633. Type:      Response       
  634. From:      Dave Lyons
  635. Date:      88-11-04 22:34:49 EST
  636. Re:        Re: Dialog Manager
  637.  
  638. Skip, I don't know why GetControlDItem would be a problem, unless you're
  639. fiddling with control attributes that the Dialog Mgr doesn't want you to fiddle
  640. with.  I've used it before.
  641.  
  642. The only trick to using Global Varaibles inside a proc that gets called by the
  643. system is to put {$LongGlobals+} before any procedure that will get executed
  644. during a call to your program from the toolbox.  The easiest thing (but not the
  645. most efficient) is to just put {$LongGlobals+} at the beginning of each
  646. UNIT--that's what I did in DIcEd (which is writ all in TML Pascal standalone,
  647. by the way!).
  648.  
  649. --Dave Lyons
  650.  
  651.  
  652.  
  653. Type:      Response       
  654. From:      TMH2
  655. Date:      88-12-17 00:15:34 EST
  656. Re:        Re: Dialog Manager
  657.  
  658. Is this a bug in my application, or in TaskMaster or DialogManager?:
  659. Take a modeless dialog, with a button currently at GLOBAL coordinate (100,100).
  660. Place the mouse at GLOBAL (80,100) (in the drag region, above the button) and
  661. drag the dialog until the button is at global (80,100) THE POINT AT WHICH THE
  662. MOUSE WAS PRESSED TO DRAG THE DIALOG  (<--key point).  Drop the window there.
  663. In my application, the button SELECTS, as if it was pressed.  The modeless
  664. dialog works fine except for this.  What gives???
  665.  
  666. Z^\GGGGGGGGGGGGGGGGGGG\_
  667. Z                     R
  668. Z  T. Mike Howeth II  N
  669. Z  Dallas, Texas      N
  670. Z  (TMH2)             V
  671. Z                B    Q
  672. ZO    WVWVWVWVWVWVWVWVP_
  673.  
  674.  
  675.  
  676. Type:      Response       
  677. From:      Dave Lyons
  678. Date:      88-12-17 01:27:12 EST
  679. Re:        phantom dialog events w/ drag
  680.  
  681. Hey, DIcEd used to behave exactly the same way, TMH...the icon-list windows are
  682. modeless dialogs.  I eventually pretty much figured out what was going on and
  683. found a way to stop, and I'll let you know what it was as soon as I dig up my
  684. source code & check!
  685.  
  686.  
  687.  
  688. Type:      Response       
  689. From:      Dave Lyons
  690. Date:      88-12-17 02:30:33 EST
  691. Re:        killing phantom dialog events
  692.  
  693. It turns out to be simpler than I remembered, if I'm piecing this together
  694. correctly.  The trick is not to call IsDialogEvent/DislogSelect if TaskMaster
  695. returns 0.  I think if you omit that test and call IDE/DS anyway, it claims the
  696. MouseUp event left over from dragging, and for some reason, for me anyway, it
  697. was Blinking a button in my dialog without actually taking any action (DS was
  698. returning zero, I guess).
  699.  
  700.     code := TaskMaster(-1, Event);
  701.     if code<>0 then
  702.       if IsDialogEvent(Event) then
  703.         if DialogSelect(Event,dlog,ditem) then
  704.           HandleDlog(dlog,ditem);
  705.     case code of...
  706.  
  707. --Dave
  708.  
  709.  
  710.  
  711. Type:      Response       
  712. From:      TMH2
  713. Date:      88-12-18 01:59:19 EST
  714. Re:        Re: Dialog Manager
  715.  
  716. BUT doesn't that cause LineEdit items to behave incorrectly?  The refman says
  717. the cursor won't behave if you don't call IDE/DS regularly.  This definately
  718. sounds like a BIG, HAIRY ROACH of a bug...
  719.  
  720. Z^\GGGGGGGGGGGGGGGGGGG\_
  721. Z                     R
  722. Z  T. Mike Howeth II  N
  723. Z  Dallas, Texas      N
  724. Z  (TMH2)             V
  725. Z                B    Q
  726. ZO    WVWVWVWVWVWVWVWVP_
  727.  
  728.  
  729.  
  730. Type:      Response       
  731. From:      Dave Lyons
  732. Date:      88-12-18 11:06:32 EST
  733. Re:        phantom hilitings
  734.  
  735. Yes, I think not calling IDE/DS when TaskMaster returns 0 will make the
  736. insertion points in any LineEdit items in modeless dialogs fail to blink. 
  737. DIcEd doesn't have any LE items in the modeless dialogs; if it did, I'd try a
  738. more complicated test, like omitting the IDE/DS calls only if TaskMaster
  739. returned 0 and the Event.what was mouseUp.
  740.  
  741.  
  742.  
  743. Type:      Response       
  744. From:      TMH2
  745. Date:      88-12-20 00:24:35 EST
  746. Re:        Re: Dialog Manager
  747.  
  748. Well, this code is going into a program generator that I use to write the base
  749. code for desktop apps, so I'll go to that extra trouble, since I need to
  750. account for the situation.  Thanks.
  751.  Z^\GGGGGGGGGGGGGGGGGGG\_
  752. Z                     R
  753. Z  T. Mike Howeth II  N
  754. Z  Dallas, Texas      N
  755. Z  (TMH2)             V
  756. Z                B    Q
  757. ZO    WVWVWVWVWVWVWVWVP_
  758.  
  759.  
  760.  
  761. Type:      Response       
  762. From:      Dave Lyons
  763. Date:      89-01-17 23:52:33 EST
  764. Re:        How to write a modal FilterProc?
  765.  
  766. (forwarded from duplicate folder)
  767.  
  768. Subj:  Dialog Manager                  89-01-17 23:38:55 est
  769. From:  Clayburn
  770.  
  771. HELP!... I am writing a IIgs program. This is my first effort at a IIgs program
  772. and there are still a lot of things that I don't understand. What I need help
  773. with right now is dialog boxes. ModalDialog has a pointer for a filter
  774. procedure. What I would like to do is cause the cancel button to be activated
  775. with <apple><.> press. But I don't understand what the filter procedure is
  776. supposed to do and how it is supposed to be contructed. I have the Apple
  777. toolbox reference manuals and it tells me certain parameters must be used, but
  778. I can't see what they mean.
  779.  
  780. I would greatly appreciate an solution to my problem.
  781.  
  782. Clay
  783.  
  784.  
  785.  
  786. Type:      Response       
  787. From:      Dave Lyons
  788. Date:      89-01-17 23:54:19 EST
  789. Re:        how to write a modal FilterProc
  790.  
  791. Clay, I've never done it myself, but that's a perfectly reasonable thing to do,
  792. and I'll see if I can figure out what you need to do from the docs.  By the
  793. way, what language are you writing in?
  794.  
  795. Your FilterProc receives 3 parameters and returns one value.  The return
  796. parameter being nonzero tells the dialog manager that no further action is
  797. needed for the event that occured.
  798.  
  799. Let's call the 3 parameters theDialogPtr, eventPtr, and itemHitPtr (as on page
  800. 6-25 of Toolbox Ref, vol I).  To have Apple-. work like your Cancel button,
  801. you'll want to check for the following conditions, and just return 0 if they
  802. aren't met.  The "what" field of the event is keyDown or autoKey; the low word
  803. of the "message" field of the event is $2e (period); and the appleKey bit of
  804. the "modifiers" field of the event is set.
  805.  
  806. So if you find Apple-. has been hit, then you store the code for your Cancel
  807. button whereever itemHitPtr points, and then you return zero (like before).
  808.  
  809. I think if you want the Cancel button to actually blink, you'll need to use
  810. GetCtlDItem (using theDialogPtr and the button's item number) to get the button
  811. control's handle (let's call it CancelBtn), and call
  812. HiliteControl(255,CancelBtn) followed by HiliteControl(0,CancelBtn).
  813.  
  814. --Dave Lyons
  815.  
  816.  
  817.  
  818. Type:      Response       
  819. From:      Dave Lyons
  820. Date:      89-01-18 00:30:42 EST
  821. Re:        HiliteControl (oops!)
  822.  
  823. Silly me...in the previous message I should have said that you "blink" a
  824. control by using HiliteControl(1,ctrlHandle) followed by
  825. HiliteControl(0,ctrlHandle).  I used 255 instead of 1; 255 is used to make a
  826. control _inactive_, not to hilite it.
  827.  
  828. --Dave
  829.  
  830.  
  831.  
  832. Type:      Response       
  833. From:      Clayburn
  834. Date:      89-01-18 20:24:51 EST
  835. Re:        Re: Dialog Manager
  836.  
  837. Dave,
  838.  
  839. I am writing in assembly language. Using Merlin 8/16. Are you saying when my
  840. filter procedure is called the three parameters have already been pushed onto
  841. the stack. And when my procedure finishes it needs to push a value onto the
  842. stack. If not explain more.  Thanks a bunch for the information.
  843.  
  844. If you would like to know I am trying to write a graphics and sound generating
  845. program.
  846.  
  847. Clay 
  848.  
  849.  
  850.  
  851. Type:      Response       
  852. From:      Dave Lyons
  853. Date:      89-01-19 03:54:09 EST
  854. Re:        filter proc calling environment
  855.  
  856. Clay, yes--the parameters are already on the stack when your filter proc is
  857. called.  The parameter passing actually works just like a tool call, except
  858. there's 3 bytes less junk on the stack after the parameters than if you were
  859. writing a tool.
  860.  
  861. Before calling your routine, the system pushes 2 bytes of space for your
  862. procedure's result; then it pushes the 3 parameters and JSLs to your routine. 
  863. Since the stack pointer points to the free byte on the stack, and since the
  864. stack builds down, LDA 4,S will get you the low word of the itemHitPtr, LDA 6,S
  865. gets the high word; 8,S and $A,S get the eventPtr; and $C,S and $E,S get
  866. theDialogPtr; and STA $10,S stores your return value.  Course, those offsets
  867. change if you push anything on the stack, even by doing a JSR!
  868.  
  869. It's probably advisable to preserve the direct page register and then set D to
  870. point into this "stack frame" so you can use direct-page addresses to get at
  871. the parameters, without worrying about the stack.  Actually, there's a pair of
  872. macros somewhere for assembly called LINK and UNLINK that would be perfect here
  873. (are they in the libraries, guys?); the UNLINK macro would save you the trouble
  874. of removing the input parameters from the stack before you return, which is
  875. your routine's responsibility.  Note that this means copying the 3-byte RTL
  876. address to a new position in the stack, adjusting the stack pointer, and RTLing.
  877.  
  878. --Dave
  879.  
  880.  
  881.  
  882. Type:      Response       
  883. From:      AFL Scott
  884. Date:      89-01-20 01:20:33 EST
  885. Re:        Re: Dialog Manager
  886.  
  887. Dave,
  888.  
  889. I uploaded Link/Unlink to the libs about 2 months ago... I think Jim might have
  890. had a problem getting them cleared, tho..
  891.  
  892. Scott
  893.  
  894.  
  895.  
  896. Type:      Response       
  897. From:      Clayburn
  898. Date:      89-01-24 20:14:12 EST
  899. Re:        Re: Filter procedure
  900.  
  901. The following is an example of dialog box and a custom filter. It is from a
  902. program I am writing so I know that it works. By the way the program that
  903. called savetbl loaded the address for st23.
  904.  
  905. * This subroutine creates a dialog box with three buttons and some text
  906.  
  907. savetbl  ~GetNewModalDialog #svtbltmp
  908.          PullLong stblptr
  909.          pha            ;Result space
  910.          lda  #^myfilter ;Address of my filter
  911.          ora  #%1000_0000_0000_0000 ;Set bit 31 to also do default filter
  912.          pha
  913.          lda  #myfilter
  914.          pha
  915.          _ModalDialog
  916.          ~CloseDialog stblptr
  917.          pla
  918.          rts
  919.  
  920. * This is a custom filter procedure. It checks to see if <Apple><.> is pressed.
  921. * If it is it activates the cancel button.
  922.  
  923. myfilter PullWord :rtl ;Save return address from stack
  924.          sep  #MODE816  ;Pull one byte
  925.          pla
  926.          sta  :rtl+2
  927.          rep  #MODE816 ;Return to two bytes
  928.                       ;Three long values and a word were put on the stack
  929.                       ;by ModalDialog That are needde by myfilter. They
  930.                       ;need to be pulled off the stack and saved before
  931.                       ;The program is set to for this data bank and direct
  932.                       ;page
  933.          PullLong :hitptr ;Pointer to item hit address
  934.          PullLong :event ;Pointer to event record
  935.          PullLong :dialptr ;Pointer to dialogs grafport
  936.          pla          ;Result space
  937.          phb          ;Save other's data bank
  938.          phk          ;Get our data bank
  939.          plb          ;Data bank = ours
  940.          phd          ;Save direct page
  941.          lda  mydp     ;Use our direct page
  942.          tcd
  943.          lda  :event   ;Load pointer of event record in zero page pointer
  944.          sta  PTR
  945.          lda  :event+2
  946.          sta  PTR+2
  947.          lda  :hitptr  ;Load pointer of item hit address in zero page
  948.          sta  PTR2     ;pointer
  949.          lda  :hitptr+2
  950.          sta  PTR2+2
  951.          stz  :hit     ;On each pass through myfilter first say didn't hit
  952.                       ;any button at first
  953.          lda  [PTR]    ;Type of event
  954.          and  #$FF     ;Only want to look at low byte
  955.          cmp  #3       ;Is It a key press?
  956.          bne  :exit    ;If not just exit
  957.          ldy  #2
  958.          lda  [PTR],y  ;Get ASCII code from event record
  959.          and  #$FF     ;Only want to look at low byte
  960.          cmp  #'.'     ;Is it a period?
  961.          bne  :exit    ;If not just exit
  962.          ldy  #14
  963.          lda  [PTR],y  ;Check modifier field.
  964.          bit  #%0000_0001_0000_0000 ;Is the apple key pressed?
  965.          beq  :exit    ;If not just exit
  966.          ~GetControlDItem :dialptr;#2 ;Get the handle of the cancel button
  967.          PullLong :chandle ;(control #2)
  968.          ~HiliteControl #2;:chandle ;Hilite and then unhilite it
  969.          ~HiliteControl #0;:chandle
  970.          lda  #2       ;Say that you hit control #2
  971.          sta  [PTR2]
  972.          sta  :hit     ;Say to handle request from myfilter
  973. :exit    lda  :hit     ;If 0 ignore  myfilter. If not zero handle myfilter
  974.                        ;request
  975.          pld           ;Restore direct page
  976.          plb           ;Restore data bank
  977.          pha           ;Do myfilter or not (from :hit)
  978.          sep  #MODE816 ;Push one byte
  979.          lda  :rtl+2   ;Restore return pointer to stack
  980.          pha
  981.          rep  #MODE816 ;Return to two bytes
  982.          PushWord :rtl
  983.          rtl
  984.  
  985. * Storage space for myfilter
  986.  
  987. :rtl     ds   3
  988. :hit     da   0
  989. :hitptr  adrl 0
  990. :event   adrl 0
  991. :dialptr adrl 0
  992. :chandle adrl 0
  993.  
  994.  
  995. stblptr  adrl 0
  996.  
  997. * Template for dialog box
  998.  
  999. svtbltmp da   58,40,141,280 ;Size and position
  1000.          da   TRUE        ;Make it visible
  1001.          adrl 0
  1002.          adrl sb3       ;button 3 "No"
  1003.          adrl sb2       ;Button 2 "Cancel"
  1004.          adrl sb1       ;Button 1 "Yes"
  1005.          adrl st2       ;Text
  1006.          adrl st1       ;Text
  1007.          adrl 0
  1008.  
  1009. st1      da   4          ;Item ID number
  1010.          da   8,8,17,88  ;Position and size in dialog box
  1011.          da   $F         ;Type (text)
  1012.          adrl st12       ;Address of text
  1013.          da   0          ;Item value
  1014.          da   TRUE       ;Visible
  1015.          adrl 0          ;Standard color table
  1016. st12     str  'Save table'
  1017.  
  1018. st2      da   5
  1019.          da   25,8,34,232
  1020.          da   $F
  1021. st23     adrl 0         ;Put text string address here
  1022.          da   0
  1023.          da   TRUE
  1024.          adrl 0
  1025. newstr   str  'before initialing new table?'
  1026. loadstr  str  'before loading new table?'
  1027.  
  1028. sb1      da   1
  1029.          da   42,8,54,40
  1030.          da   $A
  1031.          adrl sb12
  1032.          da   0
  1033.          da   FALSE
  1034.          adrl 0
  1035. sb12     str  'Yes'
  1036.  
  1037. sb2      da   3
  1038.          da   62,8,74,40
  1039.          da   $A
  1040.          adrl sb22
  1041.          da   0
  1042.          da   FALSE
  1043.          adrl 0
  1044. sb22     str  'No'
  1045.  
  1046. sb3      da   2
  1047.          da   62,72,74,128
  1048.          da   $A
  1049.          adrl sb32
  1050.          da   0
  1051.          da   FALSE
  1052.          adrl 0
  1053. sb32     str  'Cancel'
  1054.  
  1055.  
  1056.  
  1057. Type:      Response       
  1058. From:      AFL Jim
  1059. Date:      89-01-30 00:17:31 EST
  1060. Re:        Modeless Dialog
  1061.  
  1062. (moved message)
  1063.  
  1064. Subj:  modeless dialog                       89-01-29 16:25:26 est
  1065. From:  Windrider5                            Msgs:  1 (89-01-29)
  1066.  
  1067. I am developing a program for the IIgs using APWC complier and I have a
  1068. question regarding the use of Modeless dialogs.  In my program I have two
  1069. Modeless dialogs called page1 and page2.  The first dialog page1 is called from
  1070. a menu and after that modeless dialog is closed (using the CloseDialog call)
  1071. the second dailog page2 is called.  My main event loop first calls TaskMaster
  1072. then enters a while loop first using a switch statement checking  for Menu
  1073. events (wInMenuBar) then wInContent events.  I then use an if statement with a
  1074. IsDialogEvent() call.  If there is a dialog event a routine is called which 
  1075. calls DialogSelect(&EventRec, &MDPtr, &itemHit).  My problem occurs after the
  1076. first modeless dialog is called and closed and the second modeless dialog
  1077. called.  The GrafPortPtr, MDPtr, used in the DialogSelect call points not only
  1078. to the second modeless dialog page2, but also to the first modeless dialog
  1079. page1.  This presents a great deal of confusion especially if the first dialog
  1080. is called a second time since MDPtr continues to point to the second dialog.  I
  1081. hope I have made my problem clear, in essence the problem seems to involve the
  1082. way in which Modeless dialogs are closed and the way in which the handle to the
  1083. GrafPort in DialogSelect works.  Also why does both IsDialogEvent and
  1084. DialogSelect have to be called before a Modeless Dialog will appear?
  1085.  
  1086.  
  1087.  
  1088. Type:      Response       
  1089. From:      Dave Lyons
  1090. Date:      89-01-30 22:47:52 EST
  1091. Re:        modeless dialogs
  1092.  
  1093. Easy question first:  the items inside a modeless dialog don't appear until you
  1094. call DialogSelect because Update events for your modeless dialog are one kind
  1095. of event that DialogSelect takes care of.  The dialog window itself should
  1096. appear when you create it, unless you create it as Invisible and then use
  1097. ShowWindow on it (in which case it appears when you ShowWindow).
  1098.  
  1099. I'm not sure if I understand the other question, but I _think_ you're saying
  1100. this:  You open the first dialog & get a dialog pointer to it; you close the
  1101. dialog and open another one, and the second pointer points to the same place. 
  1102. Right?
  1103.  
  1104. Well, that makes perfect sense:  When you _close_ a dialog (or a window, or a
  1105. grafport, for that matter), it no longer exists.  Any pointers to that area are
  1106. invalid, and you shouldn't use them.  The system has no way of _knowing_
  1107. they're invalid, especially after you open _another_ dialog, which is _likely_
  1108. to be allocated in exactly the same spot in memory the old one was, since it's
  1109. asking the memory manager for a block of memory exactly the same size.
  1110.  
  1111. So:  It may be more appropriate for your program to open the two dialogs as
  1112. Invisible and use ShowWindow and HideWindow as appropriate, so that you can
  1113. keep two separate pointers to them.  An invisible dialog or window still exists
  1114. even in memory even though you can't see it.
  1115.  
  1116. --Dave
  1117.  
  1118.  
  1119.  
  1120. Type:      Response       
  1121. From:      AFL Jim
  1122. Date:      89-01-31 23:41:43 EST
  1123. Re:        Modeless Dialog (moved)
  1124.  
  1125. (Moved Message)
  1126.  
  1127. Subj:  modeless dialog                       89-01-31 23:32:15 est
  1128. From:  Windrider5                            Msgs:  1 (89-01-31)
  1129.  
  1130. I tried your suggestion regarding using HideWindow and ShowWindow  with my
  1131. modeless dialog windows.  Unfortunately the problem still exist.  The trouble
  1132. seems to center around the DialogSelect call and one of its 3 parameters,
  1133. namely the pointer to the GrafPortPtr. The problem is that whether I _close_
  1134. the 1st modeless dialog or use the HideWindow call this pointer parameter is
  1135. pointing to both modeless dialogs.  For example, let's say that &MDPtr is my
  1136. resultPtr for the DialogSelect which, as I understand, is where the pointer to
  1137. the active modeless dialog's GrafPort is stored if DialogSelect returns TRUE. 
  1138. Let's also say that my 2 modeless dialogs are 2 GrafPortPtrs called page1 and
  1139. page2.  I have found that after page2 is created the both statements following
  1140. the DialogSelect call are true .
  1141.  
  1142. if(DialogSelect(&theEventRec, &MDPtr, &itemHit))
  1143.  
  1144.          MDPtr == page1    /*statement #1 */
  1145.  
  1146.          MDPtr == page2     /* statement #2 */
  1147.  
  1148. As I said before I found this to be  the case whether I _close_  page1 or use
  1149. HideWindow.   I can not understand how MDPtr could be equivalent to both
  1150. GrafPortPtr.
  1151.  
  1152.  
  1153.  
  1154. Type:      Response       
  1155. From:      Dave Lyons
  1156. Date:      89-02-01 19:44:43 EST
  1157. Re:        Re: Dialog Manager
  1158.  
  1159. Windrider5, how about posting the code that creates the dialogs (specifically,
  1160. the part that assigns values to page1 and page2)?
  1161.  
  1162. If something is really equal to both page1 and to page2, then page1 must be
  1163. equal to page2, which isn't good if they're supposed to be separate dialogs.
  1164.  
  1165. You might also check for "obvious" things like using a single "=" where you
  1166. meant to use "==" (since  if(a=b)... will always seem like a "true" comparison
  1167. if b is nonzero!).
  1168.  
  1169.  
  1170.  
  1171. Type:      Response       
  1172. From:      Windrider5
  1173. Date:      89-02-07 20:51:14 EST
  1174. Re:        Re: Dialog Manager
  1175.  
  1176. /*
  1177. * This is a small "C" program which has two modeless dialogs, page1
  1178. * and page2.  The first modeless dialog is created by selecting the Page 1
  1179. * item under Modeless in the MENU bar.  This dialog has a NEXT PAGE button
  1180. * which _closes_  page1 and creates the page2 dialog.  Both modeless dialogs
  1181. * have a checkbox  item which does nothing but simply allow you to click
  1182. * on an active item in each dialog.
  1183. * In order to do some checking I use the SysBeep() call.  One beep for events in
  1184. * page 1  and 2 beeps for events in the page2 modeless dialog.  The
  1185. * SysBeep() calls are in the MDChkOut subroutine which contain the
  1186. * DialogSelect() call.  You might note that I have used two if statements
  1187. * following the DialogSelect call, instead of using an if and else combination.
  1188. * This was done so that you can see that after page1 is _closed_ and page2 is
  1189. * _opened_ the resultPtr (MDPtr) of the DialogSelect call recognizes both
  1190. * page1 and page2.  When you click the checkbox item in page2 you will
  1191. * hear three beeps.  Furthermore if you close the page2 dialog and again
  1192. * select the PAGE 1 menu item, when you click on the checkbox in page1 you
  1193. * will hear 3 beeps.
  1194. * In the program that I am working on I have several modeless dialogs each of
  1195. * which has several control items.  In this program HideWindow and ShowWindow
  1196. * seems to work fairly well, although there are still some problems apparantly
  1197. * related to the situation I described above.   However, when I tried using
  1198. * HideWindow/ShowWindow instead of the CloseDialog call with this smaller
  1199. * program I was unsuccessful. The page2 dialog window would appear but none
  1200. * of the control items i.e. button or checkbox would be visible.
  1201. *
  1202. * Well I hope you can figure out what's going on with the modeless dialogs and
  1203. * their associated routines particulary DialogSelect.   These dialogs are very
  1204. * useful, if I could get them working properly.
  1205. */
  1206.  
  1207.  
  1208.  
  1209.  
  1210. #include <types.h>
  1211. #include <locator.h>
  1212. #include <memory.h>
  1213. #include <misctool.h>
  1214. #include <quickdraw.h>
  1215. #include <event.h>
  1216. #include <window.h>
  1217. #include <menu.h>
  1218. #include <control.h>
  1219. #include <dialog.h>
  1220.  
  1221. WmTaskRec EventRec;
  1222.  
  1223. Word Event, UserID, MemID, QFlag;
  1224. char  *DPBase;
  1225. word tlErrCode;
  1226.  
  1227. ErrChk()
  1228. {
  1229.        tlErrCode = _toolErr;
  1230.        if(tlErrCode) SysFailMgr(tlErrCode, nil);
  1231. }
  1232.  
  1233. char *GetDP(bytes)
  1234. word bytes;
  1235. {
  1236.     char *OldDP = DPBase;
  1237.  
  1238.     DPBase += bytes;
  1239.     return(OldDP);
  1240.  }
  1241.  
  1242.  
  1243. Word Toolist[] = {
  1244.                   4,
  1245.                   14, 0,   /*Window Mgr*/
  1246.                   16, 0,   /*Control Mgr*/
  1247.                   15, 0,   /*Menu Mgr*/
  1248.                   21, 0,   /*Dialog Mgr*/
  1249.                  };
  1250.  
  1251. StartUpTools()
  1252. {
  1253.    Word GetDP();
  1254.  
  1255.    TLStartUp();
  1256.    ErrChk();
  1257.    UserID = MMStartUp();
  1258.    ErrChk();
  1259.    MemID = UserID | 256;
  1260.    LoadTools(Toolist);
  1261.    ErrChk();
  1262.    MTStartUp();
  1263.    ErrChk();
  1264.    DPBase = *(NewHandle(0x600L, MemID, 0xC005, nil));
  1265.    ErrChk();
  1266.    QDStartUp(GetDP(0x300), 0x0080, 0xA0, UserID);
  1267.    ErrChk();
  1268.  
  1269.    SetBackColor(0);
  1270.    SetForeColor(3);
  1271.  
  1272.    EMStartUp(GetDP(0x100), 0x14, 0, 0x280, 0, 0xC8, UserID);
  1273.    ErrChk();
  1274.    WindStartUp(UserID);
  1275.    ErrChk();
  1276.    CtlStartUp(UserID, GetDP(0x100));
  1277.    ErrChk();
  1278.    MenuStartUp(UserID, GetDP(0x100));
  1279.    ErrChk();
  1280.    DialogStartUp(UserID);
  1281.    ErrChk();
  1282. }
  1283.  
  1284. ShutDownTools()
  1285. {
  1286.    DialogShutDown();
  1287.    MenuShutDown();
  1288.    CtlShutDown();
  1289.    WindShutDown();
  1290.    EMShutDown();
  1291.    QDShutDown();
  1292.    MTShutDown();
  1293.    DisposeAll(MemID);
  1294.    MMShutDown(UserID);
  1295.    TLShutDown();
  1296. }
  1297.  
  1298.  
  1299. PrepDeskTop()
  1300. {
  1301.     static char *ModelessMenu[] ={
  1302.                                   ">> MODELESS   \\N3",
  1303.                                    "-- PAGE1 \\N261",
  1304.                                    ">"
  1305.                                  };
  1306.  
  1307.     static char *FileMenu[] ={
  1308.                                ">>   File   \\N2",
  1309.                                "-- Quit \\N262*Qq",
  1310.                                ">"
  1311.                              };
  1312.  
  1313.   RefreshDesktop(nil);
  1314.   InitCursor();
  1315.  
  1316.  
  1317.  InsertMenu(NewMenu(ModelessMenu[0]), 0);
  1318.  InsertMenu(NewMenu(FileMenu[0]), 0);
  1319.  
  1320.  FixMenuBar();
  1321.  DrawMenuBar();
  1322. }
  1323.  
  1324. GrafPortPtr page1;
  1325. Rect page1Rect = {50, 20, 150, 620};
  1326. Rect page1okRect = {20, 20, 0, 0,};
  1327. Rect page1chkRect = {50, 20, 0, 0};
  1328.  
  1329. GrafPortPtr page2;
  1330. Rect page2Rect = {50, 20, 150, 620};
  1331. Rect page2okRect = {20, 20, 0, 0,};
  1332. Rect page2chkRect = {50, 20, 0, 0};
  1333.  
  1334. DoPage1()
  1335. {
  1336.  
  1337.     page1 = NewModelessDialog(&page1Rect, NULL, topMost,
  1338.                                    0x20, NULL,NULL);
  1339.     NewDItem(page1, 9, &page1okRect, buttonItem, "\pNEXT PAGE",
  1340.                                    0,2,NULL);
  1341.     NewDItem(page1, 10, &page1chkRect, checkItem, "\pPage 1 Check",
  1342.                                    0,0,NULL);
  1343. }
  1344.  
  1345. DoPage2()
  1346. {
  1347.  
  1348.     page2 = NewModelessDialog(&page2Rect, NULL, bottomMost,
  1349.                                    0x20, NULL,NULL);
  1350.     NewDItem(page1, 19, &page2okRect, buttonItem, "\pDONE",
  1351.                                    0,2,NULL);
  1352.     NewDItem(page1, 20, &page2chkRect, checkItem, "\pPage 2 Check",
  1353.                                    0,0,NULL);
  1354.  
  1355. }
  1356.  
  1357.  
  1358. DoMenu()
  1359. {
  1360.     switch(EventRec.wmTaskData)
  1361.            {
  1362.          case 261:
  1363.                DoPage1();
  1364.                break;
  1365.          case 262:
  1366.                QFlag = TRUE;
  1367.                break;
  1368.        }
  1369.     HiliteMenu(FALSE, EventRec.wmTaskData >> 16);
  1370. }
  1371.  
  1372.  
  1373.  
  1374. MDChkOut()
  1375. {
  1376.    GrafPortPtr MDPtr;
  1377.    Word itemHit;
  1378.  
  1379.  if(DialogSelect(&EventRec, &MDPtr, &itemHit))
  1380.    {
  1381.     if(MDPtr == page1)
  1382.       {
  1383.        SysBeep();
  1384.        if(itemHit == 9)
  1385.          {
  1386.           CloseDialog(page1);
  1387.           DoPage2();
  1388.          }
  1389.       }
  1390.     if(MDPtr == page2)
  1391.       {
  1392.         SysBeep();
  1393.         SysBeep();
  1394.         if(itemHit == 19)
  1395.            CloseDialog(page2);
  1396.       }
  1397.    }
  1398. }
  1399.  
  1400. main()
  1401. {
  1402.        StartUpTools();
  1403.        PrepDeskTop();
  1404.  
  1405.        QFlag = FALSE;
  1406.        EventRec.wmTaskMask = 0x00001fff;
  1407.  
  1408.        while(!QFlag)
  1409.           {
  1410.                Event = TaskMaster(0xffff, &EventRec);
  1411.                switch(Event)
  1412.                  {
  1413.                        case wInMenuBar:
  1414.                                DoMenu();
  1415.                                break;
  1416.                        case wInContent:
  1417.                                break;
  1418.                  }
  1419.               if(IsDialogEvent(&EventRec))
  1420.                  MDChkOut();
  1421.           }
  1422.  
  1423.        ShutDownTools();
  1424.        exit(0);
  1425.   }
  1426.  
  1427.  
  1428.  
  1429. Type:      Response       
  1430. From:      Coach101
  1431. Date:      89-02-08 00:13:55 EST
  1432. Re:        Re: How About Using dRefCon
  1433.  
  1434. Windrider,
  1435.  
  1436. The code you posted was for the create/close/create/... case.
  1437. As Dave suspected, you are trying to identify things by the
  1438. addresses that the memory manager __happened__ to give them.
  1439.  
  1440. One of the arguments to NewModelessDialog is dRefCon.  This is
  1441. a longword whose use is reserved for the application.  One of the
  1442. uses that I make of this is place a flag that tells me what kind
  1443. (and which of what kind) of Dialog box I have.  The trick (not
  1444. documented or alluded to in the manuals) is getting the value
  1445. for dRefCon back from the system.  What you can do is use the
  1446. window manager routine GetWRefCon (check my spelling) with the
  1447. MDPtr returned from DialogSelect.  For example, define two
  1448. constants at the beginning of your program:
  1449.  
  1450.     #define page1_refcon 0xdead0001
  1451.     #define page2_refcon 0xdead0002
  1452.  
  1453. Now when you create the modeless dialog's pass these values as
  1454. the dRefCon (the second from the last argument in the
  1455. NewModelessDialog call).  For example:
  1456.  
  1457.     page1 = NewModelessDialog (&page1rect, nil, bottomMost,
  1458.                0x20, page1_refcon, nil) ;
  1459.  
  1460. Now when you test to see which dialog has been hit change the
  1461. test to:
  1462.  
  1463.     if (GetWRefcon(MDPtr) == page1_refcon)
  1464.  
  1465. This type of thing works great for me.
  1466.  
  1467. As to why the show/hide did not work, I do not know.  If you have
  1468. the memory, I would think that show/hide would be faster.  How
  1469. about posting the actual failing code for the show/hide failure?
  1470.  
  1471.  
  1472.  
  1473. Type:      Response       
  1474. From:      Coach101
  1475. Date:      89-02-08 00:28:42 EST
  1476. Re:        Re: Frame Scroll Bars....
  1477.  
  1478. Can I make the window frame scroll bars (turned on with the
  1479. frame flag bits on the call to NewModelessDialog) operational in
  1480. the same way they work with windows (i.e., let TaskMaster do the
  1481. work)?
  1482.  
  1483. I have caused the scroll bars to be generated by setting the
  1484. bits in the frame control word but the bars always come up white
  1485. as the driven snow (i.e., no thumb or shading).  The Size box is
  1486. also asked for and it seems to work fine?  I set the sizes of the
  1487. two rectangles (initial and zoomed) differently (i.e., zoomed is
  1488. bigger than initial) and hitting the zoom box does enlarge my
  1489. window.
  1490.  
  1491. I read some place that DIcEd uses Modeless dialog boxes and its
  1492. scroll bars work as in a normal window (at least in the Icon
  1493. editing box/window).
  1494.  
  1495. Do I need to look further at my code or am I trying to do
  1496. something that is not doable?
  1497.  
  1498.  
  1499.  
  1500. Type:      Response       
  1501. From:      AFL Scott
  1502. Date:      89-02-08 18:18:27 EST
  1503. Re:        Re: Dialog Manager
  1504.  
  1505. If I'm not mistaken Coach, Dave uses plain windows... I might be wrong... it's
  1506. been a long time since I ran Nifty List through his code.
  1507.  
  1508. Scott
  1509.  
  1510.  
  1511.  
  1512. Type:      Response       
  1513. From:      Dave Lyons
  1514. Date:      89-02-08 21:14:01 EST
  1515. Re:        Modeless dlgs can't scroll?
  1516.  
  1517. Coach, as far as I can tell the system doesn't currently support modeless
  1518. dialogs scrolling.  DIcEd does indeed use modeless dialogs for the Icon File
  1519. windows, but _not_ for the Edit Icon windows.  (Early versions used modeless
  1520. dialogs for everything, but I couldn't make them scroll!)
  1521.  
  1522.  
  1523.  
  1524. Type:      Response       
  1525. From:      Dave Lyons
  1526. Date:      89-02-08 21:15:28 EST
  1527. Re:        Windrider's modeless dlgs
  1528.  
  1529. Windrider, I couldn't see the end of the code you posted--I'm using the IIe
  1530. version of the ALPE software, and I got a BUFFER FULL before it was all here.
  1531.  
  1532. Like Coach says, one way to go is using the RefCons (reference constants).  But
  1533. the dialogs _do_ stay put in memory between the time you open them and the time
  1534. you close them, so comparing the pointers is okay, too.
  1535.  
  1536. The only fishy thing I noticed in the part of your code I saw is that GetDP is
  1537. declared as char * when it's defined, but redeclared as Word inside your tool
  1538. startup function.  Apparently this doesn't cause a crash, but it scares me--you
  1539. ought to declare GetDP as a Word in the first place, and have it do "return(
  1540. (Word) xxx );" instead of "return(xxx);".
  1541.  
  1542.  
  1543.  
  1544. Type:      Response       
  1545. From:      Coach101
  1546. Date:      89-02-09 00:07:32 EST
  1547. Re:        Re: Windrider Compared Pointers
  1548.  
  1549. As you deduced early on Dave, Windrider is closing a dialog,
  1550. opening a second, and then looking at the pointer returned by
  1551. DialogSelect to see which dialog an event is posted against.
  1552. Thats almost surely doomed to failure in the long run.  But,
  1553. Windrider also says that the Show/Hide (without closing, thereby
  1554. releasing memory for re-use) also failed.  That code I would
  1555. like to look at to see what is going on there (the pointer
  1556. technique should be valid in that case).
  1557.  
  1558.  
  1559.  
  1560. Type:      Response       
  1561. From:      Matt DTS
  1562. Date:      89-02-11 02:14:36 EST
  1563. Re:        Re: Dialog Manager
  1564.  
  1565. We interrupt this discussion for a general editorial.
  1566.  
  1567. Folks, if you're having really bad problems getting the Dialog Manager to do
  1568. what you want, please give consideration to just doing it in a window and using
  1569. the Window and Control Managers to keep track of things.  It's not that much
  1570. more difficult and gives a lot more flexibility.
  1571.  
  1572. We now return you to the discussion in progress.
  1573.  
  1574.  
  1575.  
  1576. Type:      Response       
  1577. From:      Coach101
  1578. Date:      89-02-12 12:25:08 EST
  1579. Re:        Re: Default Buttons - ReSetting
  1580.  
  1581. My ModeLess dialog contains three critical _action_ buttons for
  1582. the user (Validate, Calculate, Output).  The dialog is created
  1583. with _Validate_ as the default button.  Once _Validate_ is
  1584. successfully completed, _Calculate_ is to become the default
  1585. button.  Other user actions (and program reactions to errors and
  1586. problems) will cause the current default button to move around.
  1587.  
  1588. My first take at this was to use SetDefButton to move things
  1589. around.  This seems to work in that the new default button gets
  1590. its _double-box_ enhancement, but the previous default button's
  1591. appearance does not change (i.e., it is also a benefactor of the
  1592. _double-box_ visual enhancement).  I have two questions:
  1593.  
  1594. 1)  What is the accepted (i.e., violates no Apple commandments
  1595.     and should work with future ToolBox releases) way to change
  1596.     default buttons and have the graphic rendition properly
  1597.     reflected to the user?
  1598.  
  1599. 2)  How do you get rid of a button's default status and not
  1600.     make some other button the default (e.g., convert to a
  1601.     dialog that has _no_ default buttons from a dialog that has
  1602.     a default button)?
  1603.  
  1604. I have not tried using SetDefButton with an Id of zero (the last
  1605. time I used an ItemId of zero I spent several days chasing what
  1606. had gone wrong) and I have not put in code to RemoveDItem and
  1607. then NewDItem (it would undoubtedly work, but it seems like
  1608. overkill for what I am trying to do).
  1609.  
  1610.  
  1611.  
  1612. Type:      Response       
  1613. From:      Dave Lyons
  1614. Date:      89-02-12 18:12:18 EST
  1615. Re:        changing default buttons
  1616.  
  1617. Hmmm...don't know how to switch to having _no_ default button; good question. 
  1618. RemoveDItem and NewDItem w/ a different item number would be one way...so that
  1619. there is no item with the button number of the default button.
  1620.  
  1621. To make the old control redraw, first be sure the port is set to your dialog
  1622. and then use InvalRect(controlHandle^.boundsRect).
  1623.  
  1624.  
  1625.  
  1626. Type:      Response       
  1627. From:      Dave Lyons
  1628. Date:      89-02-12 18:14:10 EST
  1629. Re:        Err...
  1630.  
  1631. I mean InvalRect(ControlHandle^^.boundsRect), I spoze.
  1632.  
  1633.  
  1634.  
  1635. Type:      Response       
  1636. From:      Coach101
  1637. Date:      89-02-12 20:17:24 EST
  1638. Re:        Re: InvalRect I Guess....
  1639.  
  1640. I tried a Hide/Show (after discovering that any part of the
  1641. ex-default-button that had to be redrawn was drawn _without_ the
  1642. accent) but all that gets me is a "flash to white" follwed by
  1643. the accented button again.
  1644.  
  1645. I was going to use GetDItemRect (if thats spelled correctly) and
  1646. was wrestling with how to guess what level of expansion to apply
  1647. in order to get the button outline (which is outside the
  1648. bounds-rect I gave to DialogManager).  I gather by the fact that
  1649. you are suggesting it, that the control record rectangle includes
  1650. the space occupied by the the button outline.
  1651.  
  1652. Since DialogManager knows all the info when I call SetDefButton,
  1653. it would have been nice of him/her/it to do it for me; but, I
  1654. guess you can only fit so much in a finite ROM space.
  1655.  
  1656. Thanks for the suggestion Dave.  I will give it a try and report
  1657. its success back to you.
  1658.  
  1659.  
  1660.  
  1661. Type:      Response       
  1662. From:      Coach101
  1663. Date:      89-02-17 22:27:39 EST
  1664. Re:        Re: Changing Default Buttons
  1665.  
  1666. Grrrrrr.......
  1667.  
  1668. First, both GetDItemBox and the rectangle from the control record
  1669. define a space that does _not_ include the button outline(s).  I
  1670. am still checking my code, but with the help of NiftyList and
  1671. a few printf statements I am fairly certain I am doing things
  1672. correctly.  I put all the code in an external function so I could
  1673. use it from several places.  I pass two arguments to the function
  1674. (Dialog_ and DItem).  The first thing I do is GetPort and save
  1675. the result.  I then SetPort to Dialog_.  Having secured the
  1676. previous environment and _guaranteed_ I am pointing to the
  1677. correct port (verified via printf and NiftyList ~w) I then use
  1678. GetDItemBox to get the bounds rectangle of the buttonItem that
  1679. I am playing with.  My first take just passed a pointer to the
  1680. rectangle I obtained on to InvalRect, restored the GrafPort that
  1681. was in effect on entry (in case it was different) and then
  1682. returned to the caller.  This does not work!
  1683.  
  1684. I am in the process of adjusting the rectangle that I pass to
  1685. InvalRect but at the present time, it looks like a loser to me.
  1686. This simple little task may well be on the road to being more
  1687. work than it merits!  I have a little more work to do in order
  1688. to absolutely convince myselft that I do not have a bug and I
  1689. will post another message back here when I come to a final
  1690. conclusion.
  1691.  
  1692. Dave, have you ever made this work?
  1693.  
  1694.  
  1695.  
  1696. Type:      Response       
  1697. From:      Coach101
  1698. Date:      89-02-17 23:38:30 EST
  1699. Re:        Re: Default Buttons -- I Give Up
  1700.  
  1701. Well, I see nothing abnormal in my code.  I went back and changed
  1702. the code to NewRgn/RectRgn/UpdateDialog/DisposeRgn and that just
  1703. gets me a flashing button for a second.
  1704.  
  1705. I played around with a simple EraseRect and got some interesting
  1706. results.  I erase the the button, and somebody redraws it for me
  1707. (without the default enhancements).  Looks good until you obscure
  1708. the button with some other window.  When the obscuring window is
  1709. removed, the part of the button that was not obscured is fine but
  1710. the part of the button that was obscured (and was there before
  1711. the obscuring window encroached) is now erased (i.e., white).
  1712.  
  1713. I am thoroughly confused and have no idea who is doing what to
  1714. whom when?  Any thoughts?
  1715.  
  1716.  
  1717.  
  1718. Type:      Response       
  1719. From:      Matt DTS
  1720. Date:      89-02-17 23:48:27 EST
  1721. Re:        Re: Dialog Manager
  1722.  
  1723. Gee, someday we'll have to do something like an _InvalControls call to make
  1724. this easier, I suppose.
  1725.  
  1726. Coach - if the button outline is outside the Control Rectangle (and you can
  1727. prove it will be on the bottom of page 4-14 of the Toolbox Reference), you can
  1728. try a few things.
  1729.  
  1730. What seems to be happening (Dave will correct me if I'm wrong) is that the
  1731. Dialog Manager or someone has changed the status of the control in memory, but
  1732. no one has redrawn it in the window.  An _InvalRect on the control's rect won't
  1733. work because the offending shadow is outside the control's rect.  So, one thing
  1734. to try might be to get the rect as Dave suggested, but then add three or four
  1735. pixels on each side (to expand the rect around the outline) and then _InvalRect
  1736. on that.
  1737.  
  1738. Another thing which might work is the _DrawOneCtl command.  Redrawing the
  1739. effected control might do it in one step.
  1740.  
  1741. Here's a simple test:  if an InvalRect on the entire Dialog doesn't work, or if
  1742. _RefreshDesktop doesn't do it, then Dave and I are wrong and the Dialog Manager
  1743. has NOT changed the control in memory.  Neither of these last two methods
  1744. (_InvalRect on the Dialog or _RefreshDesktop) is good enough to leave in, but
  1745. it will show you if the control is really correct in memory or not, just
  1746. waiting for someone to redraw it correctly.
  1747.  
  1748. --Matt
  1749.  
  1750.  
  1751.  
  1752. Type:      Response       
  1753. From:      Dave Lyons
  1754. Date:      89-02-18 02:21:40 EST
  1755. Re:        Invalidating controls
  1756.  
  1757. Yeah, what Matt said.  Note that InsetRect makes it very easy to adjust
  1758. rectangles.  Use negative numbers for the 2nd and 3rd parameters to make the
  1759. rectangle bigger.  (There is no "OutsetRect" toolbox call; it isn't needed,
  1760. because you just need to negate the dx and dy parameters.)
  1761.  
  1762.  
  1763.  
  1764. Type:      Response       
  1765. From:      Windrider5
  1766. Date:      89-02-18 14:05:02 EST
  1767. Re:        Re: Dialog Manager
  1768.  
  1769. I have finally got my modeless dialogs working just fine using the Show and
  1770. Hide Window method.  Apparently, the problem was that I was opening all the
  1771. dialogs first (in reverse order) and then Hiding each one in turn.  I guess
  1772. this caused some confusion (most likely in my own code) that resulted in the
  1773. wrong dialogs appearing. Interestingly, the small sample program which I posted
  1774. (modelessdial.c) still has problems with the Show/Hide window method.  Coach101
  1775. expressed interest in seeing that code so I'm posting that version in a
  1776. separate message.  In any  case thanks for the advice about using the Show/Hide
  1777. method.
  1778.  
  1779. A couple additional comments/questions re: dialogs.
  1780.  
  1781. 1.  I read a message which suggested that instead of messing around with the
  1782. modeless dialog, I should make my own windows and controls using the Window and
  1783. Control mgrs.  I really don't buy that argument.  This method is ok if you are
  1784. just using radiobuttons, simplebuttons or checkboxes, but things get pretty
  1785. tricky if your dialog/window has editlines or icons.  The modeless dialog (now
  1786. that I've got it working) is as flexible as using a window, but handles all the
  1787. tedious work of making and dealing with controls automatically, which is what
  1788. the TOOLBOX is all about. The only thing I don't know about yet, is how the
  1789. Dialog mgr handles custom controls versus using the Control mgr (guess what
  1790. I'll be asking about in up coming messages).
  1791.  
  1792. 2. When using longStatText, does anyone know of a good (as opposed to hit &
  1793. miss) method of passing the number of bytes in the string?
  1794.  
  1795. 3. Finally, when using the longStatText (using a C style string), I will get a
  1796. "string too long" error message even when I have far fewer than 32,767
  1797. characters.  Any advice on this problem?
  1798.  
  1799.  
  1800.  
  1801. Type:      Response       
  1802. From:      Windrider5
  1803. Date:      89-02-18 14:14:45 EST
  1804. Re:        Re: Dialog Manager
  1805.  
  1806. /*
  1807. * This is a small "C" program which has two modeless dialogs, page1
  1808. * and page2.  The first modeless dialog is created by selecting the Page 1
  1809. * item under Modeless in the MENU bar.  This dialog has a NEXT PAGE button
  1810. * which _closes_  page1 and creates the page2 dialog.  Both modeless dialogs
  1811. * have a checkbox  item which does nothing but simply allow you to click
  1812. * on an active item in each dialog.
  1813. * In order to do some checking I use the SysBeep() call.  One beep for events in
  1814. * page 1  and 2 beeps for events in the page2 modeless dialog.  The
  1815. * SysBeep() calls are in the MDChkOut subroutine which contain the
  1816. * DialogSelect() call.  You might note that I have used two if statements
  1817. * following the DialogSelect call, instead of using an if and else combination.
  1818. * This was done so that you can see that after page1 is _closed_ and page2 is
  1819. * _opened_ the resultPtr (MDPtr) of the DialogSelect call recognizes both
  1820. * page1 and page2.  When you click the checkbox item in page2 you will
  1821. * hear three beeps.  Furthermore if you close the page2 dialog and again
  1822. * select the PAGE 1 menu item, when you click on the checkbox in page1 you
  1823. * will hear 3 beeps.
  1824. * In the program that I am working on I have several modeless dialogs each of
  1825. * which has several control items.  In this program HideWindow and ShowWindow
  1826. * seems to work fairly well, although there are still some problems apparantly
  1827. * related to the situation I described above.   However, when I tried using
  1828. * HideWindow/ShowWindow instead of the CloseDialog call with this smaller
  1829. * program I was unsuccessful. The page2 dialog window would appear but none
  1830. * of the control items i.e. button or checkbox would be visible.
  1831. *
  1832. * Well I hope you can figure out what's going on with the modeless dialogs and
  1833. * their associated routines particulary DialogSelect.   These dialogs are very
  1834. * useful, if I could get them working properly.
  1835. */
  1836.  
  1837.  
  1838.  
  1839.  
  1840. #include <types.h>
  1841. #include <locator.h>
  1842. #include <memory.h>
  1843. #include <misctool.h>
  1844. #include <quickdraw.h>
  1845. #include <event.h>
  1846. #include <window.h>
  1847. #include <menu.h>
  1848. #include <control.h>
  1849. #include <dialog.h>
  1850.  
  1851. WmTaskRec EventRec;
  1852.  
  1853. Word Event, UserID, MemID, QFlag;
  1854. char  *DPBase;
  1855. word tlErrCode;
  1856.  
  1857. Boolean firstTimepg1 = FALSE;
  1858. Boolean firstTimepg2 = FALSE;
  1859.  
  1860. ErrChk()
  1861. {
  1862.        tlErrCode = _toolErr;
  1863.        if(tlErrCode) SysFailMgr(tlErrCode, nil);
  1864. }
  1865.  
  1866. char *GetDP(bytes)
  1867. word bytes;
  1868. {
  1869.     char *OldDP = DPBase;
  1870.  
  1871.     DPBase += bytes;
  1872.     return(OldDP);
  1873.  }
  1874.  
  1875.  
  1876. Word Toolist[] = {
  1877.                   4,
  1878.                   14, 0,   /*Window Mgr*/
  1879.                   16, 0,   /*Control Mgr*/
  1880.                   15, 0,   /*Menu Mgr*/
  1881.                   21, 0,   /*Dialog Mgr*/
  1882.                  };
  1883.  
  1884. StartUpTools()
  1885. {
  1886.    Word GetDP();
  1887.  
  1888.    TLStartUp();
  1889.    ErrChk();
  1890.    UserID = MMStartUp();
  1891.    ErrChk();
  1892.    MemID = UserID | 256;
  1893.    LoadTools(Toolist);
  1894.    ErrChk();
  1895.    MTStartUp();
  1896.    ErrChk();
  1897.    DPBase = *(NewHandle(0x600L, MemID, 0xC005, nil));
  1898.    ErrChk();
  1899.    QDStartUp(GetDP(0x300), 0x0080, 0xA0, UserID);
  1900.    ErrChk();
  1901.  
  1902.    SetBackColor(0);
  1903.    SetForeColor(3);
  1904.  
  1905.    EMStartUp(GetDP(0x100), 0x14, 0, 0x280, 0, 0xC8, UserID);
  1906.    ErrChk();
  1907.    WindStartUp(UserID);
  1908.    ErrChk();
  1909.    CtlStartUp(UserID, GetDP(0x100));
  1910.    ErrChk();
  1911.    MenuStartUp(UserID, GetDP(0x100));
  1912.    ErrChk();
  1913.    DialogStartUp(UserID);
  1914.    ErrChk();
  1915. }
  1916.  
  1917. ShutDownTools()
  1918. {
  1919.    DialogShutDown();
  1920.    MenuShutDown();
  1921.    CtlShutDown();
  1922.    WindShutDown();
  1923.    EMShutDown();
  1924.    QDShutDown();
  1925.    MTShutDown();
  1926.    DisposeAll(MemID);
  1927.    MMShutDown(UserID);
  1928.    TLShutDown();
  1929. }
  1930.  
  1931.  
  1932. PrepDeskTop()
  1933. {
  1934.     static char *ModelessMenu[] ={
  1935.                                   ">> MODELESS   \\N3",
  1936.                                    "-- PAGE1 \\N261",
  1937.                                    ">"
  1938.                                  };
  1939.  
  1940.     static char *FileMenu[] ={
  1941.                                ">>   File   \\N2",
  1942.                                "-- Quit \\N262*Qq",
  1943.                                ">"
  1944.                              };
  1945.  
  1946.   RefreshDesktop(nil);
  1947.   InitCursor();
  1948.  
  1949.  
  1950.  InsertMenu(NewMenu(ModelessMenu[0]), 0);
  1951.  InsertMenu(NewMenu(FileMenu[0]), 0);
  1952.  
  1953.  FixMenuBar();
  1954.  DrawMenuBar();
  1955. }
  1956.  
  1957. GrafPortPtr page1;
  1958. Rect page1Rect = {50, 20, 150, 620};
  1959. Rect page1okRect = {20, 20, 0, 0,};
  1960. Rect page1chkRect = {50, 20, 0, 0};
  1961.  
  1962. GrafPortPtr page2;
  1963. Rect page2Rect = {50, 20, 150, 620};
  1964. Rect page2okRect = {20, 20, 0, 0,};
  1965. Rect page2chkRect = {50, 20, 0, 0};
  1966.  
  1967. DoPage1()
  1968. {
  1969.   if(!firstTimepg1)
  1970.    {
  1971.     page1 = NewModelessDialog(&page1Rect, NULL, topMost,
  1972.                                    0x20, NULL,NULL);
  1973.     NewDItem(page1, 9, &page1okRect, buttonItem, "\pNEXT PAGE",
  1974.                                    0,2,NULL);
  1975.     NewDItem(page1, 10, &page1chkRect, checkItem, "\pPage 1 Check",
  1976.                                    0,0,NULL);
  1977.     firstTimepg1 = TRUE;
  1978.    }
  1979.   else
  1980.     ShowWindow(page1);
  1981. }
  1982.  
  1983. DoPage2()
  1984. {
  1985.  
  1986.   if(!firstTimepg2)
  1987.    {
  1988.     page2 = NewModelessDialog(&page2Rect, NULL, topMost,
  1989.                                    0x20, NULL,NULL);
  1990.     NewDItem(page1, 19, &page2okRect, buttonItem, "\pDONE",
  1991.                                    0,2,NULL);                                  
  1992. 0,2,NULL);
  1993.     NewDItem(page1, 20, &page2chkRect, checkItem, "\pPage 2 Check",
  1994.                                    0,0,NULL);
  1995.     firstTimepg2 = TRUE;
  1996.  
  1997.    }
  1998.  else
  1999.    ShowWindow(page2);
  2000. }
  2001.  
  2002.  
  2003. DoMenu()
  2004. {
  2005.     switch(EventRec.wmTaskData)
  2006.        {
  2007.          case 261:
  2008. /*           if(firstTimepg1)
  2009.                  ShowWindow(page1);
  2010.                else
  2011.                  DoPage1();  */
  2012.                DoPage1();
  2013.                break;
  2014.          case 262:
  2015.                QFlag = TRUE;
  2016.                break;
  2017.        }
  2018.     HiliteMenu(FALSE, EventRec.wmTaskData >> 16);
  2019. }
  2020.  
  2021.  
  2022.  
  2023. MDChkOut()
  2024. {
  2025.    GrafPortPtr MDPtr;
  2026.    Word itemHit;
  2027.  
  2028.  if(DialogSelect(&EventRec, &MDPtr, &itemHit))
  2029.    {
  2030.     if(MDPtr == page1)
  2031.       {
  2032.        SysBeep();
  2033.        if(itemHit == 9)
  2034.          {
  2035.           HideWindow(page1);
  2036.           DoPage2();
  2037.          }
  2038.       }
  2039.     if(MDPtr == page2)
  2040.       {
  2041.         SysBeep();
  2042.         SysBeep();
  2043.         if(itemHit == 19)
  2044.           {
  2045.            HideWindow(page2);
  2046.           }
  2047.       }
  2048.    }
  2049. }
  2050.  
  2051. main()
  2052. {
  2053.        StartUpTools();
  2054.        PrepDeskTop();
  2055.  
  2056.        QFlag = FALSE;
  2057.        EventRec.wmTaskMask = 0x00001fff;
  2058.  
  2059.        while(!QFlag)
  2060.           {
  2061.                Event = TaskMaster(0xffff, &EventRec);
  2062.                switch(Event)
  2063.                  {
  2064.                        case wInMenuBar:
  2065.                                DoMenu();
  2066.                                break;
  2067.                        case wInContent:
  2068.                                break;
  2069.                  }
  2070.               if(IsDialogEvent(&EventRec))
  2071.                  MDChkOut();
  2072.           }
  2073.  
  2074.        ShutDownTools();
  2075.        exit(0);
  2076.   }
  2077.  
  2078.  
  2079.  
  2080. Type:      Response       
  2081. From:      Coach101
  2082. Date:      89-02-18 17:35:54 EST
  2083. Re:        Re: InvalButton - Guess Again
  2084.  
  2085. RefreshDesktop will cause the button to be redrawn without
  2086. the _default_ enhancement.  Nothing else that I do (from
  2087. within the program) seems to make that happen.  I have
  2088. tried InvalRect with values that I know (and confirmed with
  2089. printf statements) encompass the _default_ enhancement.
  2090. I have tried DrawDialog (it should be faster than
  2091. RefreshDesktop) but all it does is _flash_ every item
  2092. in the dialog at me as it (I presume) erases and re-draws
  2093. them (needless to say the ex-default button keeps its
  2094. _default_ enhancement).
  2095.  
  2096. I know of three things that will get the _default_
  2097. enhancement _zapped_:
  2098.  
  2099.     1.   Issue a RefreshDesktop() from within the
  2100.          InvalidateDItem function.  This can be slower
  2101.          than sin on a busy desk top.
  2102.  
  2103.     2.   Click the Zoom box in the window twice (once gets
  2104.          the desired effect but leaves the window in the
  2105.          opposite zoom state of what the user had in
  2106.          effect, ergo the second one to get things back to
  2107.          status quo).  This is not only slow but dangerous
  2108.          since the interaction between _moving_ a window
  2109.          and _zooming_ a window can actually leave you
  2110.          with a _zoom_ box that is really a
  2111.          _toggle_position_ box.
  2112.  
  2113.     3.   Drag some other window over the offending button
  2114.          and then close or drag the other window away.
  2115.          The part of the ex-default button that was
  2116.          obscured is now re-drawn _correctly_.
  2117.  
  2118. I tried using InvalRect, building a _phony_ update event
  2119. record, calling DialogSelect with the _phony_ update event
  2120. and praying.  That did not work either.  My current guess
  2121. is that some piece of the toolbox has indicated to the
  2122. world that there is no _default_ enhancemnet in effect but
  2123. has failed to erase the _default_ enhancement; so
  2124. everytime the bloody thing is updated, everyone ignores
  2125. the area occupied by the _default_ enhancement (because
  2126. everyone believes it is not there).  The methods that work
  2127. do so (work that is) because the area is erased before
  2128. being redrawn.
  2129.  
  2130. Matt, did not quite understand what you were getting at
  2131. with:
  2132.  
  2133.    "if the button outline is outside the Control
  2134.     Rectangle (and you can prove it will be on the bottom
  2135.     of page 4-14 of the Toolbox Reference) ... "
  2136.  
  2137. I read the manuals profusely (on occasion the material even
  2138. penetrates my thick skull and dense brain).  But, I never
  2139. use the manual to __prove__ anything!  Proving is reserved
  2140. for dumps and actually doing things!  By the way, I
  2141. consider the Apple technical documentation to be very
  2142. good!  My only complaint would be that I would like to see
  2143. more detail in some places; a really minor complaint, most
  2144. of the time you hit it on the head with the right amount
  2145. of detail.
  2146.  
  2147.  
  2148.  
  2149. Type:      Response       
  2150. From:      Coach101
  2151. Date:      89-02-18 17:39:03 EST
  2152. Re:        Re: WindRider's Problem
  2153.  
  2154. I have downloaded the material and am looking at it now.  One
  2155. question though.  What editor and "C" compiler are you using.
  2156. The file contains _backspace_ characters at positions that
  2157. suggest you put them in (i.e., not line hits).  APW "C" chokes
  2158. on them (bad token).  I got rid of them and am continuing looking
  2159. for your problem.  When I execute your program and select next
  2160. window out of window-1, thats the end of the story.  The second
  2161. window comes up blank and the only option left is to quit.
  2162.  
  2163. Is this the "actual" (as in exact replica) of the failing case?
  2164.  
  2165.  
  2166.  
  2167. Type:      Response       
  2168. From:      Coach101
  2169. Date:      89-02-18 19:18:12 EST
  2170. Re:        Re: A Solution For Windrider
  2171.  
  2172. You have a _typo_ when you create the DItems for the _page2_
  2173. modeless dialog.  On your NewDItem calls you pass _page1_ where
  2174. you should be passing _page2_.  Net effect is that you created
  2175. all the DItems in _page1_'s modeless dialog.  After correcting
  2176. the _typo_ everything seems to run fine (one beep for _page1_
  2177. hits, 2 beeps for _page2_ hits).
  2178.  
  2179.  
  2180.  
  2181. Type:      Response       
  2182. From:      Coach101
  2183. Date:      89-02-18 19:20:59 EST
  2184. Re:        Re:EraseRect _then_ InvalRect
  2185.  
  2186. What seems to work, though I do not think it is foolproof, is to
  2187. do an EraseRect of a larger rectangle (encompassing the box
  2188. outline(s)) and then InvalRect only the rectangle that you get
  2189. with GetDItemBox.
  2190.  
  2191. Matt, would you say there was a bug somewhere or ... ?
  2192.  
  2193.  
  2194.  
  2195. Type:      Response       
  2196. From:      Dave Lyons
  2197. Date:      89-02-19 07:41:45 EST
  2198. Re:        longStatText items
  2199.  
  2200. To avoid having to count the characters in a longStatText item, use a strlen()
  2201. call in the NewDItem call.  Easy, no?
  2202.  
  2203.  
  2204.  
  2205.  
  2206. Type:      Response       
  2207. From:      Coach101
  2208. Date:      89-02-23 23:22:42 EST
  2209. Re:        Re: InvalDItem - Small Problem
  2210.  
  2211. I have a small function that I call to do the InvalidateDItem
  2212. function.  This works fine except in one obscure case.  If I have
  2213. done an invalidate on a button, then gone back to having that
  2214. button as default, and then I use AlertWindow to create a window
  2215. that only partially obscures the present default button (which
  2216. has been through InvalidateDItem previously in its life), the
  2217. part of the button that was not obscured is drawn without the
  2218. default _enhancement_; the part of the button that was obscured
  2219. is drawn with the enhancement.  In order to prove that I was
  2220. _covering_ the entire _enhancement_ with the EraseRect call,
  2221. I changed the EraseRect to a FrameRect and commented out the
  2222. the InvalRect.  This leaves a _framed_ button on the screen for
  2223. me to inspect with a magnifying glass.  With the constants I am
  2224. presently using, the frame was just above and below the default
  2225. enhancement (i.e., no pixel gap vertically) and one pixel
  2226. outside the enhancement on the left and right (i.e., one pixel
  2227. gap horizontally).
  2228.  
  2229. This is a minor problem and only of interest from a esthestic
  2230. viewpoint from I would like to get this _totally_ correct for
  2231. purposes of personal pride if nothing else.  I will post the
  2232. actual code of my function in the following mail message (hoping
  2233. to keep it inside Dave's buffer limits).
  2234.  
  2235. Anyone have any ideas.
  2236.  
  2237.  
  2238.  
  2239. Type:      Response       
  2240. From:      Coach101
  2241. Date:      89-02-23 23:31:15 EST
  2242. Re:        Re: InvalDItem - Problem Code
  2243.  
  2244. /*
  2245. This "C" function will invalidate the area occupied by a
  2246. specified item within a specified Dialog.  Since the area has
  2247. been invalidated, the item will be redrawn the next time the
  2248. Dialog's window is updated (generally pretty quickly after the
  2249. call).
  2250. */
  2251.  
  2252. #define    Failure     0
  2253. #define    Success     1
  2254.  
  2255. #include <types.h>
  2256. #include <control.h>
  2257. #include <dialog.h>
  2258. #include <event.h>
  2259. #include <lineedit.h>
  2260. #include <quickdraw.h>
  2261. #include <window.h>
  2262.  
  2263. #include <postemsg.h>
  2264.  
  2265. unsigned int InvalidateDItem ( Dialog_ , DItem )
  2266.  
  2267.                 GrafPortPtr          Dialog_ ;
  2268.        unsigned int                  DItem ;
  2269.  
  2270.    {
  2271.  
  2272.  
  2273.    /*
  2274.    Declare the external variables necessary for the error
  2275.    reporting package.
  2276.    */
  2277.    extern          EmsgTbl          InvalidateDItemErrorText[1] ;
  2278.    extern          EmsgTbl          InvalidateDItemWhereText[1] ;
  2279.    auto            EmsgTblPtr       LIB_ER_MODUL_hold ;
  2280.    auto            EmsgTblPtr       LIB_ER_TXTBL_hold ;
  2281.    auto            EmsgTblPtr       LIB_ER_WHTBL_hold ;
  2282.  
  2283.  
  2284.    /*
  2285.    Declare our local storage needs.
  2286.    */
  2287.    auto            Rect                 DItemRect ;
  2288.    auto   unsigned int                  DItemType ;
  2289.    auto            GrafPortPtr          GrafPort_OnEntry ;
  2290.    auto   unsigned int                  ReturnValue ;
  2291.  
  2292.  
  2293.    /*
  2294.    Install ourselves as the current module and save the previous
  2295.    modules error reporting vectors.
  2296.    */
  2297.    LIB_ER_MODUL_hold = LIB_ER_MODUL ;
  2298.    LIB_ER_TXTBL_hold = LIB_ER_TXTBL ;
  2299.    LIB_ER_WHTBL_hold = LIB_ER_WHTBL ;
  2300.    LIB_ER_MODUL      = (EmsgTblPtr)"\pInvalidateDItem" ;
  2301.    LIB_ER_TXTBL      = &InvalidateDItemErrorText[0] ;
  2302.    LIB_ER_WHTBL      = &InvalidateDItemWhereText[0] ;
  2303.  
  2304.  
  2305.    /*
  2306.    Set the default return value and save the current GrafPort so
  2307.    that we can restore it upon exit.
  2308.    */
  2309.    ReturnValue = Failure ;
  2310.    GrafPort_OnEntry = GetPort () ;
  2311.    SetPort ( Dialog_ ) ;
  2312.  
  2313.  
  2314.    /*
  2315.    Get the enclosing rectangle for the Dialog Item that we are
  2316.    going to invalidate.  Then go ahead and InvalRect the little
  2317.    ditty.
  2318.    */
  2319.    GetDItemBox ( Dialog_ , DItem , &DItemRect) ;
  2320.    if (_toolErr)
  2321.        {
  2322.        PostEmsg (SysErr_Caution , _toolErr , 0x0001 ) ;
  2323.        goto ReturnToCaller ;
  2324.        }
  2325.    InvalRect ( &DItemRect ) ;
  2326.  
  2327.  
  2328.    /*
  2329.    If this is a simple button item, then we need to enlarge the
  2330.    rectangle to include the boxes involved and then we EraseRect
  2331.    the area to get rid of any _default_ enhancements that may be
  2332.    in effect.
  2333.    */
  2334.    DItemType = GetDItemType ( Dialog_ , DItem ) ;
  2335.    if (_toolErr)
  2336.        {
  2337.        PostEmsg ( SysErr_Caution , _toolErr , 0x0002 ) ;
  2338.        goto ReturnToCaller ;
  2339.        }
  2340.    if ( (DItemType&(~itemDisable)) == buttonItem )
  2341.        {
  2342.        DItemRect.v1 -= 3 ;
  2343.        DItemRect.h1 -= 6 ;
  2344.        DItemRect.v2 += 3 ;
  2345.        DItemRect.h2 += 6 ;
  2346.        EraseRect ( &DItemRect ) ;
  2347.        }
  2348.  
  2349.  
  2350.    /*
  2351.    Return to the caller.
  2352.    */
  2353.    ReturnValue = Success ;
  2354.    ReturnToCaller:
  2355.    SetPort (GrafPort_OnEntry) ;
  2356.    LIB_ER_MODUL = LIB_ER_MODUL_hold ;
  2357.    LIB_ER_TXTBL = LIB_ER_TXTBL_hold ;
  2358.    LIB_ER_WHTBL = LIB_ER_WHTBL_hold ;
  2359.    return (ReturnValue) ;
  2360.  
  2361.    }
  2362.  
  2363.  
  2364.  
  2365. Type:      Response       
  2366. From:      Dave Lyons
  2367. Date:      89-02-24 20:14:43 EST
  2368. Re:        double button outlines are pains
  2369.  
  2370. I _think_ I've got a grip on what you're trying to do.  If I do, all you need
  2371. to do is put the InvalRect call _after_ the code that expands the rectangle. 
  2372. In other words, you're invalidating the dialog item, but you're not
  2373. invalidating the extra-big version that includes the area where the double
  2374. outline is drawn.
  2375.  
  2376. By the way, instead of those for += and -= assignment statements, you could
  2377. expand the rectangle like this:
  2378.  
  2379.     InsetRect(&DItemRect,-6,-3);
  2380.  
  2381. Getting everything to look just right is a very Good Thing!  I wish everybody
  2382. would take the trouble to do that.  I see far too many ugly menus and
  2383. half-dimmed buttons....
  2384.  
  2385.  
  2386.  
  2387. Type:      Response       
  2388. From:      Dave Lyons
  2389. Date:      89-02-24 20:18:14 EST
  2390. Re:        changing default button good?
  2391.  
  2392. BTW, I'm not a human interface guidelines expert, but it seems that generally
  2393. you want the default button to always be the same to avoid confusing the user. 
  2394. There are probably legit exceptions to that, and certainly it's okay if what
  2395. the _user_ sees is the same (your program might build its dialogs differently
  2396. in different cases & have a different item number for what the user sees as the
  2397. same old thing).
  2398.  
  2399.  
  2400.  
  2401. Type:      Response       
  2402. From:      Coach101
  2403. Date:      89-02-24 21:17:42 EST
  2404. Re:        Re:Why I Change Default Buttons
  2405.  
  2406. I have a copy of AHIG (Apple Human Interface Guidelines) and will
  2407. confess to not having read the entire document.  I think of a
  2408. default button as a short-cut (since it is triggered by a CR as
  2409. opposed to a mouse click) to the most common user reaction at a
  2410. given time.  One thing I have personally observed in using
  2411. desktop applications is that I get really angry at applications
  2412. that cause me to have to continually switch from keyboard to
  2413. mouse.  There is no _reasonable_ alternative to the keyboard for
  2414. entering a text item and so I have set the default button to be
  2415. the most common action after a given text entry.
  2416.  
  2417. My program generates a six-generation pedigree for a user
  2418. specifed dog/bitch and then outputs the pedigree to the printer
  2419. (presently using TextTool calls, but I just picked up the Source
  2420. Code Sampler V-1 at APDA today, so look out for me in the
  2421. PrintManager folder).  My Modeless dialog contains a number of
  2422. items that control what happens with three _action_ buttons.  The
  2423. action buttons (in the order that they have to be executed) are:
  2424.  
  2425.   VALIDATE -- Make sure the EditLine item points to an animal
  2426.               is in the data file.
  2427.  
  2428.   CALCULATE - Generate a 6 generation pedigree in the LineageTbl.
  2429.  
  2430.   PRINT ----- Take a gues at what this does.
  2431.  
  2432. Now, initially, VALIDATE is the default button.  Once a VALIDATE
  2433. has been done, the program auto-magically switchs the default
  2434. button to CALCULATE (makes no sense to validate again).  If you
  2435. do a successful CALCULATE another auto-magic switch is made so
  2436. that the default button becomes PRINT.  Touch the LineEdit item
  2437. anyplace along the way (thereby invalidating any VALIDATE and/or
  2438. CALCULATE that has been done) and auto-magically the default
  2439. button becomes the VALIDATE button again.  Since it takes almost
  2440. zip time to do a VALIDATE (even with a disk file of 1,000+
  2441. animals) it is very convenient to stroke in an Akc number (the
  2442. dogdom equivalent of a social security number) and whack the old
  2443. CR/ENTER.  Almost before you realize it the program has either
  2444. complained about a missing animal (via AlertWindow with a default
  2445. button so you do not have to leave the keyboard to do your
  2446. correction) or has changed the Modeless dialog's window title to
  2447. be the name of the dog whose Akc number was entered.  Since the
  2448. dog was found (in quick time) and your finger is still on the
  2449. CR/ENTER, just whack it again and a pedigree will be calculated.
  2450. This, unfortunately, takes a little time (<30 seconds).  A lot
  2451. of times the next step is actually to have the program display
  2452. some information about the missing elements of the pedigree,
  2453. change some of the output options (dogdom specific formatting)
  2454. or occasionally, whack the CR/ENTER again and get your hardcopy.
  2455.  
  2456. Anyway, thats the reason I did it with multiple default buttons.
  2457. Keep the users hands in one place as much as possible.
  2458.  
  2459. I will give your suggestion a try, but I believe that I tried it before with
  2460. the end result being a _flashing_ button that ended
  2461. up with the undesired embellishments.  I read your prior item
  2462. on using InsetRect but left my code as it was since it seemed a
  2463. hair more self-documenting and though it may (or may not) take
  2464. more space it has to execute faster.  I shall report back after
  2465. having modified my library routine and seeing what I get.
  2466.  
  2467. Thanks for the attention.....
  2468.  
  2469.  
  2470.  
  2471. Type:      Response       
  2472. From:      Coach101
  2473. Date:      89-02-25 02:11:50 EST
  2474. Re:        Re: InvalidateDItem -- Got It...
  2475.  
  2476. Well, Dave, as I thought I remembered, a simple InvalRect that
  2477. encompasses the entire button as drawn (i.e., including the
  2478. _sticky_ enhancements around it) just gives you a fade to white
  2479. followed by a fully enhanced button.  I played some more and the
  2480. solution that gets rid of the enhancment and keeps it gone even
  2481. with the AlertWindow is to:
  2482.  
  2483.   1.  Expand the rectangle by the amounts in the previous
  2484.       source code.
  2485.  
  2486.   2.  EraseRect the expanded rectangle.
  2487.  
  2488.   3.  InvalRect the _expanded_ rectangle.
  2489.  
  2490. Everything else I have tried fails in some manner.  If you want
  2491. to change the source code in the previous message, move the
  2492. InvalRect call to after the if { } that does the rectangle
  2493. expansion and EraseRect for button items.
  2494.  
  2495. This approach seems to work in all cases (that I have had the
  2496. oppurtunity/misfortune to test/deal-with).
  2497.  
  2498. Matt, Dave
  2499.  
  2500.    I would sure like to have an understanding of how things are
  2501.    really being done between WindowManager, DialogManager, and
  2502.    ControlManager so that I could figure out how to do things
  2503.    like this without having to resort to shotgun techniques.  My
  2504.    experience with _shotgun_ and _EasterEgg_ approaches is that
  2505.    they are not wholly reliable from release to release.  The
  2506.    surprising part to me is the need for the EraseRect call.
  2507.  
  2508.  
  2509.  
  2510. Type:      Response       
  2511. From:      Dave Lyons
  2512. Date:      89-02-25 14:01:39 EST
  2513. Re:        invalidating expanded rectangle
  2514.  
  2515. Good, glad it's working now.  Moving the InvalRect _was_ what I suggested,
  2516. wasn't it?  :)
  2517.  
  2518. I don't think your approach is going to break in the future, although the need
  2519. to inval and erase the old default button might be removed in the future.  (It
  2520. seems like SetDefButton should take care of it, right?)
  2521.  
  2522. What it is you want to know about the dialog/window managers?  Seems like you
  2523. already have a pretty good grip on it, if you knew in the first place that
  2524. InvalRect was something that would help by causing part of the dialog to be
  2525. redrawn later.  InvalRect adds to the Update Region of the dialog's window, and
  2526. later TaskMaster will call GetNextEvent, which will return an update event for
  2527. your dialog.  TaskMaster returns that to your program, your program calls
  2528. IsDialogEvent and then DialogSelect.  DialogSelect processes the update event
  2529. by (among other things, probably) calling BeginUpdate, DrawControls, and
  2530. EndUpdate.  Between a BeginUpdate and EndUpdate, only areas that were in the
  2531. Update region will be drawn (other stuff gets clipped).
  2532.  
  2533.  
  2534.  
  2535. Type:      Response       
  2536. From:      Coach101
  2537. Date:      89-02-25 14:48:27 EST
  2538. Re:        Re: The Strange Behaviour Is....
  2539.  
  2540. Sorry about the misunderstanding Dave, I thought you meant to
  2541. just use a properly sized InvalRect and throw away the EraseRect.
  2542.  
  2543. The behaviour that causes me to ask about the relationships
  2544. between the players in this scenario was that: a) RefreshDeskTop
  2545. will get the control redrawn correctly _without_ any external
  2546. (i.e., EraseRect, InvalRect) actions whereas a DrawDialog will
  2547. redraw the dialog without correcting the default button
  2548. enhancment situation, and b) the split personality of a button
  2549. that has had a _full_ EraseRect and a _partial_ InvalRect.  It is
  2550. almost as if someone is caching something and restoring it in
  2551. certian situations (the AlertWindow case?).  And I would expect
  2552. RefreshDesktop and DrawDialog to have the same effect on a given
  2553. dialog (i.e., totally redraw it, but redraw it the same way
  2554. irrespective of which call was made).  These aberrations in
  2555. the behaviour I was expecting mean that my "model" of the inter-
  2556. play between these toolbox routines is inaccurate.
  2557.  
  2558.  
  2559.  
  2560. Type:      Response       
  2561. From:      Dave Lyons
  2562. Date:      89-02-26 02:54:38 EST
  2563. Re:        RefreshDesktop vs. DrawDialog
  2564.  
  2565. Well, _I_ knew what I meant.  :)
  2566.  
  2567. The difference between RefreshDesktop and DrawDialog is that RefreshDesktop
  2568. causes all visible parts of windows to be erased to their background patterns
  2569. and invalidated.  (Well, actually just the parts that are inside the rectangle
  2570. you pass to RefreshDesktop, if you pass one.)  DrawDialog doesn't do any
  2571. erasing.
  2572.  
  2573. I guess I don't understand the other case you mentioned, but I don't think any
  2574. part of the toolbox other than the Menu Manager actually caches and restores
  2575. any screen images.
  2576.  
  2577.  
  2578.  
  2579. Type:      Response       
  2580. From:      Coach101
  2581. Date:      89-02-26 11:33:50 EST
  2582. Re:        Re: One Down....
  2583.  
  2584. Aha, it finally sinks in.  The _erase_ action fits nicely with my
  2585. deduction that what has happened is that the "data structures"
  2586. say to not draw the enhancement (SetDefButton must have made that
  2587. correction) but the enhancement was never erased!  So, when you
  2588. you just redraw the material that is supposed to be there
  2589. (DrawDialog case) without erasing the enhancement (that the "data
  2590. structures" say is not there) stays around.  If anything surfaces
  2591. to explain the AlertWindow case to me I will post a message back
  2592. here; it may have nothing to do with AlertWindow, per se, but
  2593. with what the state of things (i.e., what were between doing) are
  2594. when the AlertWindow call is made.  Thanks for the attention.
  2595.  
  2596.  
  2597.  
  2598. Type:      Response       
  2599. From:      Dave Lyons
  2600. Date:      89-02-26 14:28:22 EST
  2601. Re:        AlertWindow over a dialog
  2602.  
  2603. Well, what is it that AlertWindow makes happen, again?  When it goes away,
  2604. whatever part of your dialog was obscured will be erased to your dialog
  2605. window's background pattern and invalidated, just like RefreshDesktop does. 
  2606. (Actually, I wouldn't be surprised at all if the Window Manager is _calling_
  2607. RefreshDesktop with the rectangle for the window that went away!)  I wonder
  2608. what happens for nonrectangular windows, though...I guess I'll have to write
  2609. one someday....
  2610.  
  2611.  
  2612.  
  2613. Type:      Response       
  2614. From:      Coach101
  2615. Date:      89-02-26 18:59:02 EST
  2616. Re:        Re: Alert vs. Dialog Case
  2617.  
  2618. What happens is that I have a button that _is_ the default button
  2619. but probably been through the InvalidateDItem wringer one or more
  2620. times (I am not sure if I ever ran into the following situation
  2621. when the button had not been through the wringer).  Now the
  2622. AlertWindow obscures the partially obscures the button (left
  2623. hand 30% not touched, right hand 70% covered).  When the
  2624. AlertWindow comes up everything looks normal (i.e., the part of
  2625. the button that can be seen has the default button enhancements).
  2626. When the AlertWindow goes away, the entire area is reworked, and
  2627. the left hand part (which was not obscured) has lost its default
  2628. enhancement whereas the right hand part is re-drawn with the
  2629. enhancement.  Hmmm.....  Now that I explain it all, the most
  2630. likely situation would be that I did myself in...  Nah, if I had
  2631. done the EraseRect, I would have also issued the InvalRect...
  2632.  
  2633. Anyway thats what was happening....  With Erase & Inval set to
  2634. the _enlarged_ rectangle it all works and visual fidelity is
  2635. maintained.
  2636.  
  2637.  
  2638.  
  2639. Type:      Response       
  2640. From:      CompuWizA
  2641. Date:      89-04-06 18:39:43 EST
  2642. Re:        Dialog Item Color Table Ptr.
  2643.  
  2644. What does an item color table look like ? I can't find documentation about this
  2645. in any Toolbox manual. Does it look like a regular color table ? Apparently not
  2646. because when I tried to do that I got all sorts of colors that were not in my
  2647. color table. I'm creating a dialog box with 16 radio buttons and I'm trying to
  2648. make each one a different color. I'm writing in assembly and using Merlin 16+.
  2649.  
  2650.         ???CompuWizA????
  2651.  
  2652.  
  2653.  
  2654. Type:      Response       
  2655. From:      Dave Lyons
  2656. Date:      89-04-06 23:38:27 EST
  2657. Re:        dialog item color tables
  2658.  
  2659. You have to look up the color tabes in the Control Manager chapter.  See page
  2660. 4-16, 4-18, 4-20, 4-22, 4-24 for color tables for standard kinds of controls.
  2661.  
  2662.  
  2663.  
  2664. Type:      Response       
  2665. From:      Matt DTS
  2666. Date:      89-04-07 21:51:36 EST
  2667. Re:        Re: Dialog Manager
  2668.  
  2669. Even better, see the System Disk 4.0 Release Notes and/or the Toolbox Reference
  2670. Update.  The Control Manager on 3.2 and later was enhanced to provide dithered
  2671. color controls in 640 mode, giving 16 colors for using color values $0 -$F.
  2672.  
  2673. --Matt
  2674.  
  2675.  
  2676.  
  2677. Type:      Response       
  2678. From:      CompuWizA
  2679. Date:      89-04-08 16:09:55 EST
  2680. Re:        Got It : Dialog Mgr. Bug
  2681.  
  2682. Thanks guys. Now I have a bug to report : If you create two dialog radio
  2683. buttons each with different colors and select the buttons in succesion the
  2684. first selected will turn the same colors as the second. I think this is because
  2685. the Control Mgr. routine for this does not change the drawing color to the
  2686. button that is going to be turned off and _then_ set the color to the other
  2687. button and turn on the selected button.
  2688.  
  2689.              CompuWizA
  2690.  
  2691.  
  2692.  
  2693. Type:      Response       
  2694. From:      Dave Lyons
  2695. Date:      89-04-09 00:47:31 EST
  2696. Re:        dialog mgr color table bug?
  2697.  
  2698. CompuWizA, I'd like to see your code & try to verify the possible bug.
  2699.  
  2700. One thing to check:  does your color table remain in memory after it's used?  I
  2701. think it has to, so it shouldn't be a local variable in Pascal or an auto
  2702. variable in C inside a procedure/function that returns before the dialog is
  2703. closed.
  2704.  
  2705. --Dave
  2706.  
  2707.  
  2708.  
  2709. Type:      Response       
  2710. From:      Windrider5
  2711. Date:      89-04-25 21:10:16 EST
  2712. Re:        Re: Dialog Manager ParamText
  2713.  
  2714. Could someone explain how the ParamText routine works, particularly with
  2715. regards to how it can be used to hide or change text (instead of using the
  2716. HideDItem routine) as stated on bottom of page 6-24 of the ToolBox Reference. 
  2717. ( a description in C would  be appreciated).
  2718.  
  2719.  
  2720.  
  2721. Type:      Response       
  2722. From:      AFL Dyfet
  2723. Date:      89-04-29 10:40:34 EST
  2724. Re:        Re: Dialog Manager
  2725.  
  2726. Subj:  Dialog Manager                        89-04-29 03:12:40 EDT
  2727. From:  PElseth                               Msgs:  1 (89-04-29)
  2728.  
  2729. How can an application know which line edit item is active
  2730. in a particular _modeless_ dialog window?  I need to know
  2731. in order to vary my character filtering according to the
  2732. active le item.
  2733.  
  2734. For example, supposing I had a modeless dialog which asks
  2735. for a page header (which should allow any non-control
  2736. characters), and a line number (which should only allow
  2737. numbers and editing keys) - how can I filter appropriately
  2738. for each (this is a contrived example)?
  2739.  
  2740. This question may apply to _modal_ dialogs also.  Does
  2741. the itemHitPtr passed to a modal dialog filter contain
  2742. the item number of the current le item if a key is pressed?
  2743.  
  2744. Any suggestions would be welcome.  -- Paul Elseth
  2745.  
  2746.  
  2747.  
  2748. Type:      Response       
  2749. From:      SteveSand
  2750. Date:      89-06-27 23:33:34 EST
  2751. Re:        Re: Scroll bars in Dialog
  2752.  
  2753. I've been working tonight on using a scroll bar within a Dialog Box.  I am
  2754. using TML Pascal.  I initialize the scroll bar with:
  2755.  
  2756.   NewDItem(FileDlogPtr,2,rect,13,nil,0,3,nil):
  2757.  
  2758. I am having two immediate problems ---
  2759.  
  2760.    1) The 'nil' in the middle of the paramenter list is supposed to       be a
  2761. pointer to a scroll bar control procedure.  When I
  2762.       replace this with "@ScrollBar" (a procedure with currently
  2763.       nothing in it), I get a runtime crash. Am I referring to the
  2764.       pointer wrong?
  2765.  
  2766.    2) I got around the initial problem by putting a GetDItemValue
  2767.       in a loop in my Dialog procedure.  This works fine for
  2768.       telling where the the thumb is.  I can drag the thumb OK.
  2769.       How do I tell if there has been a click in the Page Up area
  2770.       or in the scroll bar arrows?
  2771.  
  2772. I have been reading the toolbox references; but, could sure use
  2773. some suggestions on which direction to proceed.
  2774.  
  2775.                                                   Thanks,
  2776.  
  2777.                                                   Steve
  2778.  
  2779.  
  2780.  
  2781.  
  2782. Type:      Response       
  2783. From:      Dave Lyons
  2784. Date:      89-06-29 22:59:13 EST
  2785. Re:        scroll bar dialog action procs
  2786.  
  2787. Gee, Steve, I *know* I already answered this question somewhere...must've been
  2788. on comp.sys.apple.
  2789.  
  2790. The second part of your question has an easy answer:  your scroll bar action
  2791. procedure is informed when the page areas and arrows are used.
  2792.  
  2793. The crashes you're getting are becuase you haven't declared your procedure with
  2794. the appropriate number of bytes of input parameters--they need to be removed
  2795. from the stack before the procedure returns.  Pascal takes care of this for
  2796. you, but it has to know how many paramters there are.  (You'll need them
  2797. declared right anyway when it comes time to actually use them.)
  2798.  
  2799. From page 6-15 of Toolbox Reference volume 1, you should declare your procedure
  2800. like this:
  2801.  
  2802. function myDialogScrollProc(code: integer; dlg: dialogPtr;
  2803.                             itemID: integer): integer;
  2804.  
  2805. (It doesn't say that explicitly in the book, by the way.)
  2806.  
  2807. Be sure to turn on long global variables with {$LongGlobals+} in TML Pascal, or
  2808. whatever is appropriate for your language, unless you will *not* be using any
  2809. global variables during the procedure (or during anything it calls).  The value
  2810. of the Bank register is not guaranteed when your procedure is called.
  2811.  
  2812. --Dave
  2813.  
  2814.  
  2815.  
  2816. Type:      Response       
  2817. From:      SkipS
  2818. Date:      89-09-18 22:31:52 EST
  2819. Re:        Re: Dialog Manager
  2820.  
  2821. How does one go about using more than one font in a dialog?
  2822. Like in the 'about..' diaglog.   I'd like to have a large outline font for a
  2823. title and the rest of the text as normal fonts.
  2824. Thanks for any info...
  2825. Skip
  2826.  
  2827.  
  2828.  
  2829. Type:      Response       
  2830. From:      Dave Lyons
  2831. Date:      89-09-19 20:47:36 EST
  2832. Re:        multiple fonts in About box
  2833.  
  2834. One way is to use a LongStatText2 item, which can have all the same control
  2835. codes for controlling styles/etc as LETextBox2 (see Toolbox Reference, Volume
  2836. 1, Line Edit chapter).
  2837.  
  2838. A less beautiful approach is to draw stuff directly into your window, which you
  2839. know is going to stay in front (so you don't have to worry too much about
  2840. updating it).
  2841.  
  2842. --Dave
  2843.  
  2844.  
  2845.  
  2846. Type:      Response       
  2847. From:      Windrider5
  2848. Date:      89-09-23 14:58:28 EST
  2849. Re:        Re: multi fonts in dialog
  2850.  
  2851. I believe you might be able to use the SetDAFont routine (pg 6-79 in the
  2852. ToolBox Reference manual.  It requires a fontHandle which I'm not quite sure
  2853. how you obtain.
  2854.  
  2855.  
  2856.  
  2857. Type:      Response       
  2858. From:      Damien9
  2859. Date:      90-01-12 18:06:53 EST
  2860. Re:        Popups
  2861.  
  2862. Any ideas on how to put a popup menu in a modal dialog?
  2863. I'm writing in C and need to use a couple of these...
  2864.  
  2865.  
  2866.  
  2867. Type:      Response       
  2868. From:      Damien9
  2869. Date:      90-01-12 18:08:31 EST
  2870. Re:        PopUp Menus
  2871.  
  2872. Does anyone have any ideas on how to put a popup menu in a modal dialog?  I'm
  2873. writing in C and need a couple of these ...
  2874.  
  2875.  
  2876.  
  2877. Type:      Response       
  2878. From:      Coach101
  2879. Date:      90-01-12 22:50:01 EST
  2880. Re:        Hmmmm....
  2881.  
  2882. I have not tried it but, a PopUp menu is an extended control and I will have to
  2883. check, but does Dialog manager support Extended Controls?
  2884.  
  2885.  
  2886.  
  2887. Type:      Response       
  2888. From:      Damien9
  2889. Date:      90-01-13 11:08:28 EST
  2890. Re:        PopUps in Dialogs
  2891.  
  2892. Well, the Toolbox ref Vol 3 doesn't have anything to say about the dialog
  2893. manager and extended controls, but I have seen it done... I just can't remember
  2894. where....
  2895.  
  2896.  
  2897.  
  2898. Type:      Response       
  2899. From:      Damien9
  2900. Date:      90-01-21 12:55:37 EST
  2901. Re:        Popups
  2902.  
  2903. Is it possible to use an extended control (i.e., a popup menu) as a
  2904. userctlItem?  If so, what would you use for a defproc?
  2905.  
  2906.  
  2907.  
  2908. Type:      Response       
  2909. From:      WRH
  2910. Date:      90-01-29 20:20:56 EST
  2911. Re:        _Alert Call Hangs--HELP
  2912.  
  2913. I have a problem with Alert + Modal Dialog boxes and have run out
  2914. of ideas to solve it.
  2915. I realize the problem could be in many places but any suggestions  on where to
  2916. look are appreciated.
  2917.   I am using ORCA/M with System 5.0 (not 5.02).  I have a reasonably complex
  2918. desktop program with 5 windows, 13 Alert boxes, 6 modal DBoxes and 1 modeless
  2919. DBox.(Generally only one or two are open at a time).  Everything seems to work
  2920. fine at this point.  Next I added a subroutine I jsr to when there is no event
  2921. found in the main eventloop.  This routine does one of 3 things.
  2922.    1. Update the info bar of the front window
  2923.    2.  Update several small portions of the front windows contents.
  2924.    3.  Draw a simple Alertbox.
  2925.   Upon completion of 480 loops through this routine another Alert box is drawn
  2926. and the loop begins again.
  2927.    Well I wrote and coded #1 and #2 and the Alert box at the end of the 480
  2928. loops.  All were debuged and worked just fine.  Then  I added the code for #3
  2929. and the program hangs on the _Alert call.
  2930. No alert box is drawn and the computer is off in never, never land.  I've
  2931. triple checked the toolbox call and parameters passed -- I mean its only a
  2932. simple alert box-- I also tried adjusting the order the routine does numbers
  2933. 1,2, or 3 in but nothing seems to get it by the Alertbox and its associated
  2934. hang from #3.  If I leave #3 out altogther it draws the Alert box at the end of
  2935. 480 loops fine.  I then tried replacing the #3 alertbox routine with a modal D
  2936. Box only to have similar problems.  What is happening??? other than I am going
  2937. crazy quite rapidly.
  2938. ALL ideas appreciated.
  2939.                               Many thanks
  2940.                                   WRH 
  2941.  
  2942.  
  2943.  
  2944. Type:      Response       
  2945. From:      Coach101
  2946. Date:      90-02-17 12:24:58 EST
  2947. Re:        Radio Button help in Dialogs
  2948.  
  2949. The following message was moved from a different folder....
  2950.  
  2951. -----------------------------------------------------------------
  2952.  
  2953. Subj:  Radio Button help in Dialogs         90-02-17 10:25:11 EST
  2954. From:  HaveGSPLUS                           Msgs:  1 (90-02-17)
  2955.  
  2956.      I have a problem. I can't figure out how to change a group number so I can
  2957. place multiple sets of radio buttons in a dialog box. Can someone help?
  2958.  
  2959. David White [ HaveGSPLUS ]
  2960.  
  2961.  
  2962.  
  2963. Type:      Response       
  2964. From:      Coach101
  2965. Date:      90-02-17 12:26:11 EST
  2966. Re:        Radio Buttons....
  2967.  
  2968. Each group of radio buttons belongs to a family.  If memory serves me correctly
  2969. you need to avoid a family number of zero.  You fill in the itemTemplate with
  2970. an itemID (which MUST be unique with respect to all other itemIDs in the
  2971. dialog) and a family number.  The family number is placed in the itemFlag
  2972. portion of the ItemTemplate.  The DialogManager will take care of keeping only
  2973. one button "depressed" at a time.
  2974.  
  2975. Is that the information that you were looking for?
  2976.  
  2977.  
  2978.  
  2979. Type:      Response       
  2980. From:      Coach101
  2981. Date:      90-02-24 11:51:05 EST
  2982. Re:        Dialog w/TML BASIC
  2983.  
  2984. The following material was moved from a different folder...
  2985.  
  2986. -----------------------------------------------------------------
  2987.  
  2988. Subj:  Dialog w/TML BASIC                   90-01-06 15:11:49 EST
  2989. From:  WTSBrian                             Msgs:  2 (90-01-06)
  2990.  
  2991. I want to create a dialog w/TML BASIC that has textedit box items that you can
  2992. while running the program, modify on the keyboard.  The computer would then
  2993. read the info you entered in the textbox and use it in the program.  This
  2994. routine is used in many gs programs and I would like to know how to do it so I
  2995. can keep with the human interface standard in my program.  Any suggestions...
  2996.  
  2997. -----------------------------------------------------------------
  2998.  
  2999. Subj:  TML Basic..                          90-01-06 17:18:44 EST
  3000. From:  DougMac
  3001.  
  3002. Has TML Basic been updated to include the new system disk stuff? Otherwise you
  3003. might have to set up some 'interface' file stuff first.. Next there is an
  3004. assembly language example from Chris Hahn (sp?) that does a textedit as a
  3005. control in a window.. Even has NDA that is an editor. I don't know if it is u/l
  3006. on America Online though..
  3007.  
  3008. -----------------------------------------------------------------
  3009.  
  3010.  
  3011.  
  3012. Type:      Response       
  3013. From:      AFA Gary J
  3014. Date:      90-09-05 00:31:43 EST
  3015. Re:        Icon Dialog Items  (moved messages)
  3016.  
  3017.  
  3018. Subj:  Icon Dialog Items                     89-10-07 21:44:17 EDT
  3019. From:  DwayneW                               Msgs:  8 (89-12-13)
  3020.  
  3021. Can anyone explain how the Icon dialog item needs to be set up?  I can't seem
  3022. to find any explanation in the Toolbox Reference Guides, and the header
  3023. information is the same in Lichty and Eyes "Programming the Apple IIgs in
  3024. Assembly Language" and "Programmer's Introduction to the Apple IIgs."  I did
  3025. see the icon information in Quickdraw, but the section I read seemed completely
  3026. different than the icons set up in both of the above books.
  3027.  
  3028. I cannot figure out why there are two zero words in the header, nor what the
  3029. next two words are for.  I'm assuming the third and fourth words are the height
  3030. and width of the icon in pixels.
  3031.  
  3032. Can anyone clear this up for me and tell me where I can find the documentation
  3033. on it in case I forget later?
  3034.  
  3035. Thanks very much!
  3036. Dwayne Williams
  3037.  
  3038.  
  3039. Subj:  Re: Icon Dialog Items                 89-10-08 20:00:45 EDT
  3040. From:  Dave Lyons
  3041.  
  3042. Dwayne, I believe Toolbox Reference Volume 3 (APDA draft) says the Dialog
  3043. Manager doesn't actually support iconItem and picItem items.
  3044.  
  3045. I recommend you put your icon in your dialog as a userItem--so you'd have a
  3046. little routine that gets called by the dialog manager to draw your item, and
  3047. your routine could just call DrawIcon.  That way you can store your icon in the
  3048. QuickDraw Auxiliary format.
  3049.  
  3050. --Dave
  3051.  
  3052.  
  3053. Subj:  Re: Icon Dialog Items                 89-10-09 23:02:18 EDT
  3054. From:  JonahS
  3055.  
  3056. Am I right in assuming that the new 'extended' controls can't be put in a
  3057. Dialog box? I tried putting them in the template, but that didn't work
  3058. (crashed) and I tried adding them later (as TN #38 (?) shows with lists) but
  3059. then they couldn't be selected. I edned up faking a dialog (by doing a
  3060. _NewWindow2 call with the alertFrame bit set) and then writing a routine that
  3061. acts just like _ModalDialog, but it was a pain. Is there a better way to do
  3062. this?
  3063.  
  3064. Jonah
  3065.  
  3066.  
  3067. Subj:  "faking" modal dialogs                89-10-23 03:43:32 EDT
  3068. From:  Dave Lyons
  3069.  
  3070. Doing a modal dialog with NewWindow2 and TaskMaster (with a restricted set of
  3071. wmTaskMask options enabled) is exactly the approach we recommend these days.
  3072.  
  3073. --Dave
  3074.  
  3075.  
  3076. Subj:  Re: Icon Dialog Items                 89-10-23 23:14:34 EDT
  3077. From:  JonahS
  3078.  
  3079. :( (_ModalDialog is SOOOOOO much nicer)
  3080.  
  3081. Jonah
  3082.  
  3083.  
  3084. ubj:  Modal Dialogs                         89-11-05 17:37:05 EDT
  3085. From:  ChrisH01
  3086.  
  3087. First, this is 'ol Josh Thompson using AO from a friend's house...
  3088.  
  3089. Anyways, I should be back on Tuesday or Wedsnday, and at that time I'll upload
  3090. my routine that I'm using to fake modal dialogs with normal windows.  I'm using
  3091. it successfully in my packer right now.
  3092.  
  3093.  
  3094. Subj:  a customized icon                     89-11-28 04:11:42 EDT
  3095. From:  DwightW1
  3096.  
  3097. I've noticed in many of the llgs games purchased that the creators will use a
  3098. customized icon for the s16 file in a window opened by clicking their disk icon
  3099. on the finder desktop.  how does one create that customized icon which will
  3100. appear in that window on the finder desktop.....hmmmmmmm?????????????
  3101.  
  3102. dwightw1
  3103.  
  3104.  
  3105. Subj:  customizing icons                     89-12-13 01:01:24 EDT
  3106. From:  Dave Lyons
  3107.  
  3108. Dwight, to create a customized icon you need an Icon Editor, such as IconEd or
  3109. DIcEd (both Shareware and available for downloading in the AUT forum).  DIcEd
  3110. is by me (stands for Desktop Icon Editor, and you can pronounce it however you
  3111. want, at least until I include digitized sound in the About box :-) .
  3112.  
  3113. --Dave
  3114.  
  3115.  
  3116.  
  3117.  
  3118.  
  3119. Type:      Response       
  3120. From:      AFA Gary J
  3121. Date:      90-09-05 02:26:56 EST
  3122. Re:        Dialogs and Fonts (moved messages)
  3123.  
  3124.  
  3125.  
  3126. Subj:  Dialogs and Fonts...                  90-05-03 01:07:09 EDT
  3127. From:  Kerry C2                              Msgs:  4 (90-07-12)
  3128.  
  3129.   Here is the deal:  I have set up a FontID called Font, and set it equal to
  3130. Chicago 9 point, which is installed in the FONTS directory.  I call the
  3131. FMSetSysFont passing the Font, and it loads the font up nice and fine.  It
  3132. should use the font now instead of the system font, however, in my AlertWindow
  3133. boxes with buttons, the text always overflows the button by a line, causing it
  3134. to look not-so-nice.  Is they a way around this or am I screwing things up
  3135. somehow?
  3136.  
  3137.    Kerry
  3138.  
  3139.  
  3140. Subj:  Fonts & Buttons                       90-05-05 18:53:00 EDT
  3141. From:  CodeMaster
  3142.  
  3143. Did you try to redefine the boundries of your text that is placed within the
  3144. button?Subj:  Nope....                              90-05-14 22:23:03 EDT
  3145. From:  Kerry C2
  3146.  
  3147.   No, I used the NewDItem so set up button, like 'OK' or something.  Guess I'll
  3148. stick to Shaston 8 :)
  3149.  
  3150.    Kerry
  3151.  
  3152.  
  3153. Subj:  SetDAFont?                            90-07-12 21:36:53 EDT
  3154. From:  Dave Lyons
  3155.  
  3156. Kerry, did you try uisng SetDAFont (in the Dialog Mgr) to set the font used by
  3157. Dialogs and Alerts?
  3158.  
  3159. It almost sounds like the system is using one font to calculate the sizes of
  3160. things, and then using another font to actually draw them.
  3161.  
  3162. --Dv
  3163.  
  3164.  
  3165.  
  3166.  
  3167.  
  3168. Type:      Response       
  3169. From:      T McInroy
  3170. Date:      90-11-10 20:39:41 EST
  3171. Re:        LineEdit Item
  3172.  
  3173. I can put a lineItem Item into a modal dialog and put text into it, but I can't
  3174. get text back out, what am I Missing?
  3175.  
  3176.  
  3177.  
  3178. Type:      Response       
  3179. From:      Mac Hater
  3180. Date:      90-11-10 21:10:32 EST
  3181. Re:        GetIText
  3182.  
  3183. look on page 6-56 of TB ref vol 1.
  3184.  
  3185.  
  3186.  
  3187.  
  3188. Type:      Response       
  3189. From:      T McInroy
  3190. Date:      90-11-11 22:08:03 EST
  3191. Re:        EditLine
  3192.  
  3193. Thanks, I thought I was missing something obvious.
  3194.